5 Stimmen

SQL-Abfrage INSERT funktioniert nicht beim Einfügen von Werten in meine DB

Ich versuche, einige Werte in meine DB einfügen, aber es funktioniert nicht, ich versuche, herauszufinden, warum es nicht funktioniert, aber ich bin ein Amateur-PHP-Coder,

Dies ist der Code, den ich verwende:

$insert = mysql_query
    ("
    INSERT INTO news(id,title,body,date,by)
    VALUES ('NULL','".$title."','".$body."','".$date."','".$by."')
    ");
    mysql_close($connect);

Und die Zeilen, die ich versuche, in einzufügen sind: id, Titel, Körper, Datum, von
aber es wird weder in der Datenbank noch auf meiner Nachrichtenseite angezeigt.

Kann mir bitte jemand helfen?

7voto

mellamokb Punkte 55046

by ist ein besonderes Schlüsselwort. Versuchen Sie, die Spaltennamen in Ankreuzzeichen einzuschließen:

INSERT INTO news(`id`,`title`,`body`,`date`,`by`)

2voto

BillThor Punkte 6948

Ich würde erwarten, dass id Ihr Primärschlüssel ist. Er sollte keinen Nullwert zulassen. Wenn er automatisch inkrementiert wird, können Sie dies versuchen:

$insert = mysql_query
    ("
    INSERT INTO news(title,body,date, by)
    VALUES ('".$title."','".$body."','".$date."','".$by."')
    ");

Andere haben bemerkt, dass by ein reserviertes Wort ist, so dass Sie es in Anführungszeichen setzen müssen. Es ist am besten, Datenbankobjekte nicht mit reservierten Wörtern zu benennen. Erwägen Sie die Umbenennung der by Spalte zu author .

Sie sollten erwägen, die Abfrage in eine vorbereitete Anweisung umzuwandeln. Siehe Wie kann ich SQL-Injection in PHP verhindern? .

1voto

markshep Punkte 674

Versuchen Sie mysql_error() aufzurufen, um die Fehlermeldung zu erhalten: http://php.net/manual/en/function.mysql-error.php

1voto

McHerbie Punkte 2905

Zunächst einmal sollten Sie NULL nicht in einfache Anführungszeichen setzen, da es sonst als String eingegeben wird.

Außerdem gehe ich davon aus, dass Sie Folgendes verwenden mysql_real_escape_string um $title, $body, etc. zu bereinigen.

$title = mysql_real_escape_string($title);
$body  = mysql_real_escape_string($body);
$date  = mysql_real_escape_string($date);
$by    = mysql_real_escape_string($by);

Wie mellamokb anmerkte, by y date sind besondere Schlüsselwörter. Es ist am besten, wenn Sie Ihre Spalten (und Tabellennamen) mit Häkchen versehen. (dadurch wird Ihre Abfrage korrigiert)

$query = "INSERT INTO `news` (`id`, `title`, `body`, `date`, `by`) VALUES
      (NULL, '" . $title . "', '" . $body . "', '" . $date . "', '" . $by . "');";
if ($insert = mysql_query($query, $connect)) {
    // Success!
} else {
    echo 'MySQL Error: ' . mysql_error($connect); // this will tell you whats wrong
}
mysql_close($connect);

1voto

OMG Ponies Punkte 312816

Ich empfehle die Verwendung von sprintf & mysql_real_escape_string um SQL-Injektionsangriffe zu verhindern:

$insert = sprintf("INSERT INTO news
                    (id, title, body, date, `by`)
                   VALUES 
                     (NULL,'%s','%s','%s','%s')",
                   mysql_real_escape_string($title),
                   mysql_real_escape_string($body),
                   mysql_real_escape_string($date),
                   mysql_real_escape_string($by));

$result = mysql_query($insert) or die(mysql_error());

Dadurch erfahren Sie auch, welcher Fehler aufgetreten ist.

Allerdings gibt es zahlreiche potenzielle Probleme:

  • by ist ein reserviertes Schlüsselwort benötigen Sie Backticks, um die Verwendung in MySQL zu umgehen (siehe Beispiel oben). Die Alternative ist, die Spalte in etwas umzubenennen, das kein reserviertes Wort ist -- das Backticking jedes Spalten- und/oder Tabellennamens verbirgt solche Probleme eher, als dass Sie es lernen
  • NULL sollte nicht innerhalb von einfachen Anführungszeichen stehen, sonst wird es als String interpretiert; DEFAULT wäre eine weitere Option, wenn es eine DEFAULT-Beschränkung für die Spalte gibt
  • le site date Spalte sollte entweder ein DATE-, DATETIME- oder TIMESTAMP-Datentyp und kein String sein, um die MySQL Datum/Zeit-Funktionalität und sollte Folgendes verwenden DATE_FORMAT wenn der Wert nicht dem MySQL-Standard-Datumsformat entspricht

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X