为什么mysql事务不能与pdo一起工作?

c7rzv4ha  于 2021-06-25  发布在  Mysql
关注(0)|答案(0)|浏览(261)

在尝试使用事务时,我遇到了php、pdo和mysql的一些奇怪行为,我确信这不应该有问题,但确实有问题。
更改正在写入数据库,即使应该触发回滚!
所以我得到了一个api的这一部分,它正在对数据库中的数据进行更改。出于某种原因,查询(query1和query2)返回0,这意味着没有编辑任何行。这很奇怪,因为数据库中的数据发生了变化,但这是另一个问题。。
这是一段特别的经文。注意,为了可伸缩性和易用性,实际的pdo查询是由函数 Package 的,但是它们可以工作,不用担心。

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语句。
我还没有在网上发现任何类似的问题,我很想知道是否有人遇到过类似的问题。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题