为什么MySQL事务不能与PDO一起使用?

时间:2018-05-08 15:21:52

标签: php mysql pdo transactions

我在使用php,pdo和mysql时遇到了一些奇怪的行为,当我尝试使用交易时,我确信它不应该是一个问题,但确实存在。

即使应该触发回滚,也会将更改写入数据库!

所以我得到了一个API的一部分,它正在对数据库中的数据进行更改。 由于某种原因,查询(query1和query2)返回0,这意味着没有编辑任何行。 这很奇怪,因为数据库中的数据已经改变,但那是另一个问题..

所以这是特定的段落。请注意,实际的PDO查询由函数包装,以实现可伸缩性和易用性,但它们可以正常工作,不用担心。

if ($this->db->transaction('begin') == FALSE)
{
    $this->application->setStatus('508002', 'Database transaction failure');
    return FALSE;
}
$count = 0;
$query1 = $this->db->genericUpdate('someData');
$query2 = $this->db->genericDelete('someData');

$count     += $query1 + $query2;

if ($count < 1)
{
    $this->db->RWQuery('ROLLBACK'); // Tried invoking the rollback manually...
    $this->log('Count', $count); // Count is 0 in log file...
    if ($this->db->transaction('rollback') == FALSE)
    {
        $this->application->setStatus('508002', 'Database transaction failure');
        return FALSE;
    }
}

由于一些奇怪的原因,MySQL服务器似乎忽略了发送到服务器的rollback命令。 我打开了my.cnf中的查询记录:

649 Query     START TRANSACTION
649 Query     UPDATE `tbl` SET bla = 'foo' WHERE blub = 'bar'   LIMIT 1
649 Query     DELETE FROM `tbl2` WHERE bla = 'fooo'
649 Query     ROLLBACK
649 Query     rollback
649 Quit

数据库引擎是InnoDB,我检查了两次或更多次。 此外,在Apache / PHP错误日志和任何其他syslog工具中都没有抛出异常。

此外,我不会发出任何可能触发提交的DDL语句。

我在网上的任何地方都找不到类似我的问题,如果有人遇到类似的问题,我很乐意听到。

0 个答案:

没有答案