Severin Kacianka: /(MySQL) Transaktionen

Beitrag lesen

Hallo liebes Forum,

ich versuche gerade Transaktionen zu verwenden um in einer UNIQUE-Spalte zwei Werte zu tauschen (MySQL 5.0.24,PHP 5.2):
(Das "n" am Ende jeder Zeit ist nur eine Konstante mit dem Newlinecharacter)

  
$s = 'START TRANSACTION;'.n;  
    //zuerst auf NULL setzen, da die Spalte UNIQUE ist und wir sonst DUBLIKATE bekommen würden  
$s.= 'UPDATE '.AKT_EINTRAG.' SET `AINDEX` = NULL WHERE `AID` = '.(int)$lastId.';'.n;  
$s.= 'UPDATE '.AKT_EINTRAG.' SET `AINDEX` = NULL WHERE `AID` = '.(int)$r['AID'].';'.n;  
$s.= 'UPDATE '.AKT_EINTRAG.' SET `AINDEX` = '.(int)$r['AINDEX'].' WHERE `AID` = '.(int)$lastId.';'.n;  
$s.= 'UPDATE '.AKT_EINTRAG.' SET `AINDEX` = '.(int)$lastIndex.' WHERE `AID` = '.(int)$r['AID'].';'.n;  
$s.= 'COMMIT;'.n;  
mysql_query($s);  

Quittiert MySQL mit folgender Meldung:
"Error(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 ';
UPDATE akt\_eintrag SET AINDEX = NULL WHERE AID = 96;
UPDATE `akt_eintrag' at line 1"

Die gleiche Abfrage, in mehrerern einzelnen Queries gibt keine Probleme:

  
$s = 'START TRANSACTION;'.n;  
mysql_query($s);  
//zuerst auf NULL setzen, da die Spalte UNIQUE ist und wir sonst DUBLIKATE bekommen würden  
$s= 'UPDATE '.AKT_EINTRAG.' SET `AINDEX` = NULL WHERE `AID` = '.(int)$lastId.';'.n;  
mysql_query($s);  
$s= 'UPDATE '.AKT_EINTRAG.' SET `AINDEX` = NULL WHERE `AID` = '.(int)$r['AID'].';'.n;  
mysql_query($s);  
$s= 'UPDATE '.AKT_EINTRAG.' SET `AINDEX` = '.(int)$r['AINDEX'].' WHERE `AID` = '.(int)$lastId.';'.n;  
mysql_query($s);  
$s= 'UPDATE '.AKT_EINTRAG.' SET `AINDEX` = '.(int)$lastIndex.' WHERE `AID` = '.(int)$r['AID'].';'.n;  
mysql_query($s);  
$s= 'COMMIT;'.n;  
mysql_query($s);  

Ich würde gerne wissen wieso das so ist und ob die auch wirklich eine Transaktion ist oder mir nur so scheint. Auch verstehe ich nicht, warum ich das ganze nicht als _eine_ Abfrage an MySQL schicken kann. Im MySQL-Client-Programm kann ich diese Abfrage problemlos "in einer Wurst" abschicken.

Liebe Grüße und danke für eure Zeit,
Severin

--
They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety.
-- Benjamin Franklin