Woran kann das liegen (SQL) php geht nicht - php geht

5 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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:

  1. Du änderst den SQL-Delimiter auf ein Zeichen, den mysql-query() nicht vermurkst

  2. Du trennst den zu übermittelnden String in die jeweils einzelnen SQL-Anweisungen und sendest sie als einzelne Querys

  3. (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.

KiraBianca  06.11.2011, 15:59

Ups, Korrektur nötig. :-( Besagte PHP-Funktion heißt nicht mysql-multi-query(), sondern mysqli-multi-query().

0
sponge9394 
Fragesteller
 06.11.2011, 21:13
@KiraBianca

cool - vielen Dank

ich hätte nie gedacht, dass ich mit mysql-query() nur einen befehl auf einmal machen kann

0

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 ...