Woran kann das liegen (SQL) php geht nicht - php geht
ich würde gerne von PHP aus ein Query ausführen leider kommt immer die Meldung
"1064: 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 'Insert into categoryhasquestions (categoryidcategory, questionsQuestions) ' at line 1 "
wenn ich aber den SQL-Befehla ausgeben lasse und mit phpmyadmin ausführe, dann funktioniert es problemlos
Meiin SQL-Befehl wäre etwas zu lang zum Posten aber ich erkläre mal noch was er macht: ich mache ein Insert auf Tabelle A und dannach gleich mehrere Inserts auf Tabelle B (die mit A verknüpft ist) für die Verknüpfung verwende ich die Funktion Lastinsertid()
hätte jemand eine Idee, woran das liegen könnte ?
5 Antworten
Halli Spongo,
vermutlich sendest Du mit der PHP-Funktion mysql-query() durch Semikolon getrennt mehrere SQL-Befehle auf ein Mal. Das geht nicht, denn diese Funktion verträgt keine Semikolon. Semikolon werden von mysql-query() vermurkst und somit bekommt MySQL eine falsche Syntax übermittelt. phpmyadmin verwendet zur Übermittilung diese Funktion nicht, weshalb es dort dann auch problemlos klappt.
Du hast drei Möglichkeiten, Deine SQL-Befehle auch von PHP korrekt übermitteln zu lassen:
Du änderst den SQL-Delimiter auf ein Zeichen, den mysql-query() nicht vermurkst
Du trennst den zu übermittelnden String in die jeweils einzelnen SQL-Anweisungen und sendest sie als einzelne Querys
- (die wohl beste Variante) Du verwendest statt der Funktion mysql-query() die Funktion mysql-multi-query(), die problemlos auch Semikolon als Delimiter an mySQL überträgt
Gruß Kira-Bianca
P.S. die Bindestriche innerhalb der PHP-Funktionsnamen oben müssen natürlich Unterstreichungsstriche sein. Da aber der total murksige Editor hier Unterstreichungsstriche als kursiv darzustellen interpretiert, geht es leider nur mit Bindestrichen.
cool - vielen Dank
ich hätte nie gedacht, dass ich mit mysql-query() nur einen befehl auf einmal machen kann
Mit der Funktion mysql_error kannst du sehen, wo der Fehler liegt. Bei http://de2.php.net/mysql_error gibt es Beispiele, wie man diese Funktion anwendet.
Sind bestimmt nur kleine Fehlerchen wie falsche oder keine Hochkomma...
Bei Funktionen im Query dürfen keine ' ' stehen
Wenn der Befehl im PHPmyAdmin läuft, dann lass dir soch einfach nach der aktion den php-befehl generieren und ersetze die Inserrts durch deine Variablen...
Was sein könnte... Du hast alle inserts hintereinander in einem String?? möglicherweise findet er die Last insert id noch nicht...weil die zu generierende id noch im selben String steckt... und wenn das ein testlauf ist ist deine tabelle wahrscheinlich noch leer somit gibts auch keine ID von früher..
gehe einfach so vor:
INSERT INTO `deine_table` ( `id`, `char`, `int` ) Values ( '', '$text', $zahl );
zb gibt es Zeichenketten die in sql als befehl interpretiert werden... solltest du eine tabelle oder spalte "so" benannt haben MUSS dies im Befehl dann in anführungzeichen da ja sonst versucht wird den Befehl auszuführen.. Jede Variable die eingefügt wird...die einen String enthält... würde ich unbedingt vorher mit
mysql_real_escape_string()
überprüfen...dann sollte eigentlich nix schief gehen
Wenn du die Abfrage hier nicht postest, dann kann niemand erkennen welcher Fehler vorliegt. Die Meldung besagt ja, dass ein (Syntax-)Fehler in der Abfrage ist. Das kann sonstwas sein, von vergessenen Zeichen bis zu nicht vorhandenen Tabellenspalten.
Wie der kollege vor mir schon sagte brauchen wir die Query selbst. es scheint nicht an php zu liegen.
- Sind in der Anfrage alle Namen und Wert maskiert?
- Ist die Verbindung zum SQL-Server korrekt aufgebaut?
- Hat der Account die Rechte für so eine Query?
Theoretisch könnte der Fehler überall in der Abfrage liegen. Das PMA das schafft kann daran liegen das hier Fehler bereits ausgebaut werden. Z.B. vergessene Semikolon ...
Ups, Korrektur nötig. :-( Besagte PHP-Funktion heißt nicht mysql-multi-query(), sondern mysqli-multi-query().