Ankündigung

Einklappen
Keine Ankündigung bisher.

INSERT INTO Fehler beim speichern von Text

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • INSERT INTO Fehler beim speichern von Text

    Hallo liebe Forumer,
    ich muss mich doch mal an euch Profis wenden.
    Für mein Studium muss ich eine Videodatenbank erstellen. In dieser werden aus mysql Daten ausgelesen.
    Über PHP können die Daten verändert oder gelöscht werden. (Dies funktioniert).
    Mein Problem: Wenn ich neue Daten in die Datenbank schreiben möchte, bekomme ich immer folgenden Fehler:

    Fatal error: Uncaught PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'hallo' in 'where clause' in C:\xampp\htdocs\Videoverwaltung\klassen\Video.php: 110 Stack trace: #0 C:\xampp\htdocs\Videoverwaltung\klassen\Video.php( 110): PDO->query('SELECT * FROM v...') #1 C:\xampp\htdocs\Videoverwaltung\func\func_anlegen_ video.php(23): Video->anlegen() #2 {main} thrown in C:\xampp\htdocs\Videoverwaltung\klassen\Video.php on line 110

    Der Fehler tritt auf, wenn ich im Filmtitel Text eingeben (In MySQL ist das Feld titel mit varchar(100) deklariert. Gebe ich eine Zahl ein, wird das neue Video gespeichert.......
    Vielleicht könnt Ihr mir hier einmal unter die Arme greifen.

    Hier noch die function:

    PHP-Code:
    public function anlegen()
    {
    if (
    $this->titel != null)
    {
    $db DB::getVerbindung();
    $sql "SELECT * FROM videos WHERE titel=$this->titel;";
    $abfrage $db->query($sql);
    $ergebnis $abfrage->fetch();

    if (!empty(
    $this->beschreibung) && !empty($this->erscheinungsjahr) && $this->titel !=$ergebnis['titel'] && $this->beschreibung !=$ergebnis['beschreibung'])
    {
    $sql "INSERT INTO videos (titel, beschreibung, erscheinungsjahr, leihkosten, kaufkosten, hinzugefuegt_bearbeitet, letzte_aenderung_durch)
    VALUES ('
    $this->titel', '$this->beschreibung', '$this->erscheinungsjahr', '$this->leihkosten', '$this->kaufkosten', '$this->hinzugefuegt_bearbeitet', '$this->letzte_aenderung_durch');";
    $db->query($sql);

    echo 
    'Sie haben ein neues Video ' $this->titel ' hinzugefügt!';
    }
    elseif (
    $this->titel == $ergebnis['titel'])
    {
    echo 
    'Titel bereits vorhanden';
    }
    elseif (empty(
    $this->erscheinungsjahr) || empty($this->leihkosten) || empty($this->kaufkosten))
    {
    echo 
    'Sie haben kein Erscheinungsjahr oder Leihkosten oder Kaufkosten angegeben.';
    }
    }
    else
    {
    echo 
    "Keine Daten angegeben!";
    }

    Danke vorab für eure Mühen.

    Gruß
    Andreas

  • #2
    Verwende bitte PHP-Tags damit der Code ordentlich formatiert wird, so ist der nicht lesbar.

    Zitat von AnHa Beitrag anzeigen
    $sql = "SELECT * FROM videos WHERE titel=$this->titel;";
    Da fehlen die Anführungszeichen um den Wert nach dem gesucht werden soll, zudem fehlt hier (und beim INSERT weiter unten) die Behandlung des Kontextwechsels!

    Kommentar


    • #3
      Hallo tk1234,

      danke für deine Hilfe/Denkanstoß. Jetzt klappt es.
      Gruß
      Andreas

      Kommentar


      • #4
        Wenn das eine Klasse ist, hast du hoffentlich geprüft ob die Parameter dem Format entsprechen in dem sie gespeichert werden. Mir fehlt da auch da Maskieren der Werte durch quote. Wenn du schon PDO verwendest, warum dann nicht auch prepared statements, das erspart dir das Maskieren und Prüfen.

        SELECT * solltest du durch die Spalten ersetzen, die du ausgeben willst und zwar immer. Verwende dies nur zum schnellen testen, aber nie in deiner Anwendung.

        Jetzt klappt es.
        E muss heissen:"bis jetzt klappt es", ob es morgen noch so ist, wird sich zeigen.

        Darfst gerne deinen Code noch mal vorlegen.

        Kommentar

        Lädt...
        X