2016-09-29 3 views
2

Ich schreibe Nachrichten und Einfügen in meine DB, ich habe den Code vor 3 Jahren und es funktionierte gut, aber ich kann nicht mehr einfügen und ich verstehen nicht, warum:PHP Mysql INSERT INTO: kann nicht mehr einfügen

$insert=mysqli_query($co,"INSERT INTO articles VALUES('','".addslashes(htmlentities($_POST['title']))."','".time()."','".nl2br(addslashes(htmlentities($_POST['msg'])))."')") or die("insert error: ".mysqli_error()); 

, wo die Tabelle Artikel die Struktur erhalten (id: int (11) auto_increment, Titel: Text, Datum: int (11), msg: text)

Als ich versuche es Ich fiel in die "insert error" Nachricht, aber die mysqli_error() Nachricht ist leer, also habe ich einen falschen Eintrag auf phpmyadmin versucht:

INSERT INTO articles VALUES('','testset','1396642210','FUUUUUU') 

Und ich bekomme # 1366 - Falscher Integer-Wert: '' für Spalte 'id' in Zeile 1 (aber ID wird automatisch inkrementiert ?? : /)

(Verbindung und db Auswahl sind in Ordnung) Ich verstehe wirklich nicht, was passiert, ich arbeitete mit dieser Anfrage seit 2/3 Jahren und es funktionierte ... Irgendwelche Ideen?

+0

'addslashes (htmlentities ($ _ POST [‘ title '])) '=> vorbereitete Aussage verwenden. Sie werden viel sicherer sein. – Xenos

+0

Entfernen Sie die Anführungszeichen um '1396642210', vorausgesetzt, die Spalte ist ein Integer-Typ. Vielleicht haben Sie MySQL aktualisiert und die Syntaxerzwingung hat sich geändert (es hat sicherlich "GROUP BY"). –

+0

Haben Sie kürzlich Änderungen vorgenommen, die diese Einrichtung beeinträchtigen könnten? MySQL-Version? PHP-Version? Webserver-Version? Webserver? Wenn Sie das Gleiche mehrmals tun, wird das nie zu einem anderen Ergebnis führen, also muss sich etwas geändert haben. – apokryfos

Antwort

4

Sie sind zu MySQL 5.7 gewechselt, das eine neue Sicherheits- und Datenintegritätsprüfung aufweist: Eine INT-Spalte kann keinen STRING-Wert mehr als '' enthalten.

Verwenden DEFAULT als Wert oder fügen Sie einfach nicht die Spalte in Sie INSERT:

INSERT INTO articles (title, date, msg) VALUES (?, ?, ?); 

oder

INSERT INTO articles VALUES (DEFAULT, ?, ?, ?); 

, die weniger ist sicherer, wenn Spalten geändert Ordnung.

+0

Danke, das stimmt, ich habe die Versionsänderungen nicht befolgt, habe mit DEFAULT gearbeitet, danke :) – Vertus

+0

Willkommen. Bitte überlegen Sie, die Antwort zu akzeptieren. – Xenos

0

Es ist besser, keine ganzzahligen Werte in Anführungszeichen zu setzen, dies gilt wahrscheinlich für Ihre Spalte timestamp.

Wie für Auto erhöht Spalten, wie Ihre id, können Sie nur, dass aus Ihrer Abfrage verlassen und die Spalten hinzufügen, die Sie in Ihrer Anfrage füllen wollen:

INSERT INTO `articles` (`title`, `timestamp`, `msg`) VALUES ('testeset', 1396642210, 'FUUUUUU');