【问题标题】:SQL transaction not working when initiated via PHP通过 PHP 启动时 SQL 事务不起作用
【发布时间】:2013-11-09 06:27:35
【问题描述】:

我有以下查询,当它由我的 PHP 代码启动时不起作用:

$sql = 'START TRANSACTION;
        DELETE FROM task_actions
            WHERE task_id='.$id.';
        DELETE FROM tasks
            WHERE id='.$id.';
        COMMIT;
       ';

当我echo $sql并将输出直接放入phpMyAdmin时,它可以正常工作;当我分两步完成而不是一个事务时,它也可以从我的 PHP 代码中运行。

我最初认为 MySQL 可能不允许事务,但 stackoverflow.com/questions/2050310stackoverflow.com/questions/2960012 表明这是错误的。

我发现我可以禁用自动提交,同时执行查询并重新激活自动提交 (stackoverflow.com/a/17607619 & stackoverflow.com/a/12092151),但我不想这样做。

任何想法为什么它不起作用?

【问题讨论】:

  • 我对 mysqli 不太熟悉,但是您是否使用multi-query 一次运行这些多个查询?根据内存,如果您尝试运行多个查询,大多数连接都会中断。
  • 我不是。你是对的,现在我已经得到了答案和你的评论,这似乎很合乎逻辑。我将回到我原来的两步实现 - 在这种情况下似乎更短更简单。

标签: php mysql sql transactions mysqli


【解决方案1】:
$sql = 'START TRANSACTION';
// run this query
$sql = 'DELETE FROM task_actions WHERE task_id=?';
// run this query
$sql = 'DELETE FROM tasks WHERE id=?';
// run this query
$sql = 'COMMIT';
// finally run this one

【讨论】:

    猜你喜欢
    • 2012-06-04
    • 2021-07-16
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    • 2018-10-09
    相关资源
    最近更新 更多