mySQL-Anfrage-Syntax angeblich falsch.

adrian72

Grünschnabel
Hallo Leute,
stehe gerade auf dem Schlauch.
Aus einem PHP-Script heraus führe ich ein mySQL-Query aus; dabei erhalte ich eine Fehlermeldung. Wenn ich mir die Originalfehlermeldung auslesen lasse und auch den zum Fehler führenden Query, erhalte ich folgendes:

1) Error message: 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 'CREATE TEMPORARY TABLE _temp0 SELECT * FROM _def_backgrounds WHERE uid = 0; ALTE' at line 1.

2) Gesamter Query: DROP TEMPORARY TABLE IF EXISTS _temp0; CREATE TEMPORARY TABLE _temp0 SELECT * FROM _def_backgrounds WHERE uid = 0; ALTER TABLE _temp0 CHANGE uid uid INT; UPDATE _temp0 SET uid = NULL; UPDATE _temp0 SET themename = 'neueZeile'; INSERT INTO _def_backgrounds SELECT * FROM _temp0; DROP TEMPORARY TABLE IF EXISTS _temp0;

Problem ist folgendes: Wenn ich den Query unter 2), so wie er ist, in einem beliebigen Programm, z.B. der mySQLWorkbench oder Sequel Pro als Query angebe, funktioniert alles tadellos: Es wird ein temp. Table angelegt; dann wird aus der Tabelle _def_backgrounds ein Eintrag mit der uid=0 kopiert und in die temporäre Tabelle eingefügt; der neue Eintrag in der temporären Tabelle wird modifiziert, danach wird der Eintrag als "Duplikat" in die alte Tabelle _def_backgrounds eingefügt. Das Ganze dient dazu, um eine Zeile einer Tabelle zu duplizieren, und die Sache mit dem Alter Table ist notwendig, um ein autoincrement feld zu kopieren... wie gesagt, es funktioniert so sehr gut.

Aber: Sobald ich das Ganze als String über das php-Script aufrufe, kommt o.g. Fehler unter 1). Verstehe nicht, wo da ein Syntax-Fehler sein könnte.....
Noch ein Info: Sowohlder Test "direkt" in einem der mySQL-programme als auch die Anfrage über das php-Script erfolgen natürlich unter dem gleichen mySQL-user, der die entsprechenden Rechte (Alter Table, Create temp. Table) hat...

Falls ihr eine Idee habt, wäre ich dankbar.
Adrian.
 
Zuletzt bearbeitet:
Es wäre wesentlich einfacher wenn du den Code entsprechend formatieren würdest so dass man ihn lesen kann.

Ich denke aber das der Fehler deshalb auftritt weil du eben alles als kompletten String übergibst.
Du musst die Anweisungen einzeln ausführen, dann sollte es klappen.
 
Hi tombe,
krass, dauerte genau 2 Minuten, bis Du mir die ****** richtige ****** Lösung gesagt hast. Herzlichen Dank dafür. Mir war nicht so klar, dass es Einzelanweisungen sein müssen. Sorry für die Codeformatierung, werde es demnächst besser machen.
Also: Herzlichen Dank nochmals.
 

Neue Beiträge

Zurück