Mysql事务错误消息

时间:2012-02-20 14:30:25

标签: php mysql sql transactions

我有

的典型交易
START TRANSACTION
INSERT INTO ...
UPDATE ...
DELETE ...
COMMIT

问题1: UPDATE失败不会阻止交易。在单个查询中,我使用mysql_affected_rows()来检查UPDATE的成功,但是如何在交易过程中这样做?

问题2:如何检测哪个查询导致事务停止?在PHP

中制作if condiction

1 个答案:

答案 0 :(得分:2)

假设您根据提及的mysql_*()使用了mysql_affected_rows()函数,您应该只是在自己的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;
}