Warum funktioniert dieses INSERT nicht?
Whitsnake
- php
0 Sven Rautenberg0 xola0 MudGuard0 Whitesnake0 MudGuard0 Whitesnake-1 Manuel B.
0 Mike©
Ich habe eine Datenbank, an der Verbindung liegt es nicht.
Die Struktur der verlangen Tabelle "session" ist wie folgt:
"key" varchar(255) not null, primary key
"user_id" int(9) not null
"autologout" int(12) not null
So und jetzt möchte ich folgendes machen und es tut sich in der Tabelle rein gar nichts.
$key = "12";
$response = "12";
$autologout = "12";
mysql_query("INSERT INTO sessions (key, user_id, autologout) VALUES ('$key', '$response', '$autologout');");
Ich möchte dazu sagen, dass er sich korrekt verbindet etc. Andere Inserts in Tabellen wo ein einen Primärschlüssel der automatisch hochgezählt wird funken perfekt. Nur dieser nicht. Andererseits müsste sowas trotzdem gehen.
Wer sieht meinen Denkfehler?
Moin!
Wer sieht meinen Denkfehler?
Was sagt die DB dazu? Die gibt dir doch die Fehlermeldung in mysql_error() zurück.
Das sagt folgendes:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'key, user_id, autologout) VALUES ('12', '12', '12')' at line 1
Tach auch,
mysql_query("INSERT INTO sessions (key, user_id, autologout) VALUES ('$key', '$response', '$autologout');");
Kann es sein, dass es am (ungewollten) doppelten Semikolon liegt? Aber ob das das Problem löst bezweifle ich.
That's it -
xola
Hi,
"key" varchar(255) not null, primary key
key ist ein reserved keyword in Mysql. Wenn Du das als Spaltennamen nutzen willst, mußt Du den immer mit Backticks quoten.
cu,
Andreas
Schon beim generieren der Tabelle oder einfügen?
Wie sieht das dann beim einfügen aus?
INSERT INTO sessions (\key ... ?
Hi,
Schon beim generieren der Tabelle oder einfügen?
Ich würd's immer machen (oder eben einen anderen Spaltennamen nehmen).
Wie sieht das dann beim einfügen aus?
INSERT INTO sessions (\key ... ?
Backticks, nicht Backslashes.
cu,
Andreas
mysql_query("INSERT INTO sessions (``key, user_id, autologout) VALUES ('$key', '$response', '$autologout');");
funkt leider auch nicht. Ich würd schon gerne den key übergehen, aber wir sollen für eine Übung ein Backend basteln, dass Befehle des Frontends endgegennimmt und umsetzt.
Hi,
mysql_query("INSERT INTO sessions (
key
, user_id, autologout) VALUES ('$key', '$response', '$autologout');");
Du musst es mit backticks einschliessen. Das Wort "quoten" find ich in dem Zusammenhang sehr irreführend
Moin,
mysql_query("INSERT INTO sessions (key, user_id, autologout) VALUES ('$key', '$response', '$autologout');");
Versuche mal dieses Query:
mit der Belgegung, weil int:
$response=12;
$autologout=12;
$mysql_query="INSERT INTO sessions (key, user_id, autologout) VALUES ('".$key."', $response, $autologout)";
Und BTW: print mysql_error(); Hilft auch.
Dein Query String hatte weitaus mehr als einen Fehler!
regds
Mike©
Moin
Und BTW: print mysql_error(); Hilft auch.
Dein Query String hatte weitaus mehr als einen Fehler!
und Nachtrag, Danke MudGuard, key = Reserved.
regds
Mike©
Funkt leider auch nicht.
Moin
»» Funkt leider auch nicht.
Klar. SQL funkt auch nicht ;-)
Was sagt print mysql_error(); dazu? Unter Beachtung des umbenannten Feldes key?
regds
Mike©
Mein SQL findet es gut ;) key schmeckte ihm als Spaltenname gar nicht.
Ich habe das gleiche Prob.:
INSERT INTO 'bilder_alben' SET name='buchmesse 2004', dir='bilder/alben/buchmesse 2004/', timestamp=NOW()
Ich bekomme die gleiche Fehlermeldung. Ich habe schon verschiedene Schreibweisen ausprobiert, aber immer das gleiche.
TIA
Moin
Ich habe das gleiche Prob.:
Nein, hast Du nicht.
INSERT INTO 'bilder_alben' SET name='buchmesse 2004', dir='bilder/alben/buchmesse 2004/', timestamp=NOW()
Du hast Insert und Update gemischt.
SET gehört zu Update und nicht zu INSERT.
Lese nochmal das Handbuch zu SQL
regds
Mike©
Hi,
INSERT INTO 'bilder_alben' SET name='buchmesse 2004', dir='bilder/alben/buchmesse 2004/', timestamp=NOW()
Du hast Insert und Update gemischt.
SET gehört zu Update und nicht zu INSERT.
Lese nochmal das Handbuch zu SQL
Meinst Du diese Stelle
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name
SET col_name={expr | DEFAULT}, ...
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
aus http://dev.mysql.com/doc/mysql/en/insert.html?
cu,
Andreas
Moin,
Meinst Du diese Stelle
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name
SET col_name={expr | DEFAULT}, ...
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
du hast mich eiskalt erwischt :-( Diese Syntax habe ich noch nie für insert gesehen.
*KNIRSCH* Tja, man lernt nie aus.
regds
Mike©
Hi,
Ich habe das gleiche Prob.:
Die Lösung dürfte die gleiche sein.
INSERT INTO 'bilder_alben' SET name='buchmesse 2004', dir='bilder/alben/buchmesse 2004/', timestamp=NOW()
timestamp sollte reserviert sein ==> in (nicht hinter) backticks.
cu,
Andreas
Moin Andreas,
INSERT INTO 'bilder_alben' SET name='buchmesse 2004', dir='bilder/alben/buchmesse 2004/', timestamp=NOW()
timestamp sollte reserviert sein ==> in (nicht hinter) backticks.
damit hast Du wohl Recht, aber den abstrusen Query übersehen ;-)))
regds
Mike©
Hi,
INSERT INTO 'bilder_alben' SET name='buchmesse 2004', dir='bilder/alben/buchmesse 2004/', timestamp=NOW()
timestamp sollte reserviert sein ==> in (nicht hinter) backticks.
damit hast Du wohl Recht, aber den abstrusen Query übersehen ;-)))
siehe https://forum.selfhtml.org/?t=107380&m=666836
cu,
Andreas
Hi,
timestamp sollte reserviert sein ==> in (nicht hinter) backticks.
Hat aber bei mir bisher nie Probleme gemacht. Benutze das zwar wegen sauberen Programmierstil nicht mehr, aber alte Scripte aus meine PHP-Anfangszeit laufen, obwohl sie timestamp als Feldnamen haben