php - Mysql事务错误信息

标签 php mysql sql transactions

我有一个典型的交易

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/

相关文章:

php - WordPress 页面中的第二个 MySQL 数据库 PHP

php - MySQL语句好像有错误。我收到 mysqli_num_rows() 和 mysqli_fetch_array() 错误

SQL*Plus 不执行 SQL Developer 执行的 SQL 脚本

sql - 参数化查询需要未提供的参数

sql - Azure ARM 模板 "VmAgentNotRunning"

mysql - 改进 mysql 中的 SQL 语句以更快地运行。我想合并字段但在不同的行上合并

PHP 更快的素数生成器

php - 考试成绩由高到低排序

php - 我如何获取没有匹配团队名称的成员列表?

php - 模拟尚未实现的 <bdi> HTML 标签的方法?