greggy80
Mitglied
Hallo,
ich wollte ursprünglich über die Zend_Db Transaktionen ausführen mittels eines PDO_MYSQL Adapters. Das klappte jedoch nicht, auch nicht mit einem anderen Adapter (z.B. mysqli). Dann versuchte ich einen direkten Ansatz:
Das klappt allerdings auch nicht. Ich schicke per exec zwei Anfragen ab. Die zweite enthält einen offensichtlichen Syntaxfehler bei "currentTexts" (statt "currentText"). Dennoch wird der erste Datensatz einfach in die Datenbank geschrieben, es wird nicht mal eine Exception geworfen und commit() offensichtlich einfach ignoriert.
Führe ich einen Rollback allerdings ohne vorheriges beginTransaction() aus, wird sogar eine PDOException geworfen.
Woran kann dieses Verhalten liegen? Ich benutze einen MySql Clienten in der Version 5.0.37, der müsste Transaktionen doch eigentlich beherrschen können? Muss man Transaktionen vorher aktivieren? Wenn ja, dann sind sämtliche Beispiele im Internet sehr irreführend, denn dort wird immer nur ein Vorgehen ähnlich meinem beschrieben.
ich wollte ursprünglich über die Zend_Db Transaktionen ausführen mittels eines PDO_MYSQL Adapters. Das klappte jedoch nicht, auch nicht mit einem anderen Adapter (z.B. mysqli). Dann versuchte ich einen direkten Ansatz:
PHP:
$mysql_db = "";
try {
$mysql_db = new PDO('mysql:host=localhost;dbname=dbname', 'root', '');
} catch (PDOException $e){
die($e->getMessage);
}
$mysql_db->beginTransaction();
try
{
$mysql_db->exec("INSERT INTO repository_entry (currentText, insertionTimestamp) VALUES('Test', '2007-11-11')");
$mysql_db->exec("INSERT INTO repository_entry (currentTexts, insertionTimestamp) VALUES('Test2', '2007-11-11')");
$mysql_db->commit();
}
catch (Exception $e)
{
$mysql_db->rollBack();
}
Führe ich einen Rollback allerdings ohne vorheriges beginTransaction() aus, wird sogar eine PDOException geworfen.
Woran kann dieses Verhalten liegen? Ich benutze einen MySql Clienten in der Version 5.0.37, der müsste Transaktionen doch eigentlich beherrschen können? Muss man Transaktionen vorher aktivieren? Wenn ja, dann sind sämtliche Beispiele im Internet sehr irreführend, denn dort wird immer nur ein Vorgehen ähnlich meinem beschrieben.