在尝试使用事务时,我遇到了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语句。
我还没有在网上发现任何类似的问题,我很想知道是否有人遇到过类似的问题。
暂无答案!
目前还没有任何答案,快来回答吧!