我有一个典型的交易
START TRANSACTION
INSERT INTO ...
UPDATE ...
DELETE ...
COMMIT
问题 1:UPDATE
失败不会阻止事务。在单个查询中,我使用 mysql_affected_rows()
检查 UPDATE
是否成功,但如何在事务中间执行此操作?
问题 2: 如何检测导致事务停止的查询?要在 PHP
中创建 if 条件?
最佳答案
假设您根据提到的 mysql_affected_rows()
使用 mysql_*()
函数,您应该简单地在其自己的 mysql_query()
并在每个阶段检查其成功或失败。除非您将其包装为存储过程,否则您必须将它们作为单独的语句调用,因为 mysql_query()
不支持一次调用中的多个语句。
function doTransaction() {
mysql_query("START TRANSACTION;");
$ins = mysql_query("INSERT INTO ....");
if (!$ins) {
// fail
mysql_query("ROLLBACK");
return FALSE;
}
$upd = mysql_query("UPDATE...");
if (!$upd) {
// fail
mysql_query("ROLLBACK");
return FALSE;
}
if (mysql_affected rows() === 0) {
// no rows updated, rollback if necessary
mysql_query("ROLLBACK");
return FALSE;
}
$del = mysql_query("DELETE FROM...");
if (!$del) {
// fail
mysql_query("ROLLBACK");
return FALSE;
}
// All succeeded
mysql_query("COMMIT");
return TRUE;
}
关于php - Mysql事务错误信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9362755/