Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Transaction mit PHP und MySQL [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Transaction mit PHP und MySQL


 
kalleplom
02-06-2006, 10:24 
 
Hallo!

:rolleyes:

Ich habe eine Problem mit Transaction.
In einer Tabelle soll ein Status geändert werden, und
in der anderen sozusagen die Status gezählt werden.

Aber wenn die zweite Abfrage einen Fehler hat, wird
die erste trotzdem in die DB geschrieben.

Die Vorgehensweise ist doch richtig, oder?


mysql_query('START TRANSACTION') or die(mysql_error());

$qry1 = "UPDATE table1 SET status = 'AKTIV' WHERE id = 1 LIMIT 1";
mysql_query($qry1) or die(mysql_error());

$qry2 = "UPDATE table2 SET num = num+1 WHERE id = 1 LIMIT 1";
mysql_query($qry2) or die(mysql_error());

mysql_query('COMMIT') or die(mysql_error());


:confused:

 
asp2php
02-06-2006, 11:03 
 
standard arbeitet MySQL mit autocommit, d.h. es wird sofort in die DB eingetragen. Wenn du kontrollierte Transaction haben willst, musst du zuerst autocommit ausschalten

SET AUTOCOMMIT=0

dann klappt's auch mit Transaction, Commit und Co.

 
kalleplom
02-06-2006, 11:08 
 
ok, 1000 dank!

jetzt funktioniert's!

 
goth
02-06-2006, 12:26 
 
Wobei ich es für sinnvoll halten würde im Fehlerfall explizit ein ROLLBACK durchzuführen ... allein um als Programmierer die Kontrolle zu behalten ... !

 
kalleplom
07-06-2006, 16:36 
 
Von wegen, es geht... :-(

Wenn ein Fehler in der Zweiten Abfrage passiert, wird die erste trotzdem in die DB geschrieben.

Weiss jemand woran das liegen könnte?


mysql_query('SET AUTOCOMMIT = 0') or die(mysql_error());
mysql_query('START TRANSACTION') or die(mysql_error());

$qry1 = "UPDATE table1 SET status = 'AKTIV' WHERE id = 1 LIMIT 1";
mysql_query($qry1) or die(mysql_error());

$qry2 = "UPDATE table2 SET num = num+1 WHERE id = 1 LIMIT 1";
mysql_query($qry2) or die(mysql_error());

mysql_query('COMMIT') or die(mysql_error());


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:58 Uhr.