PHP PDO 事务问题
我有一个简单的 try catch,但它没有按照我的预期运行。这是我第一次尝试使用 PDO 事务:
try
{
$dbo = Db::init();
$dbo->beginTransaction();
$dbo->exec("TRUNCATE TABLE {$this->table}");
$dbo->exec($insert);
$dbo->commit();
}
catch(Exception $e)
{
$dbo->rollBack();
echo 'Failed to sync ' . $this->table;
}
问题是,如果 $dbo->exec($insert);
失败,则 $dbo->exec("TRUNCATE TABLE {$this->table}");
不会回滚。有什么想法吗?
I have a simple try catch which is not operating how I would expect. This is my first try at using transactions with PDO:
try
{
$dbo = Db::init();
$dbo->beginTransaction();
$dbo->exec("TRUNCATE TABLE {$this->table}");
$dbo->exec($insert);
$dbo->commit();
}
catch(Exception $e)
{
$dbo->rollBack();
echo 'Failed to sync ' . $this->table;
}
The problem is, if the $dbo->exec($insert);
fails, the $dbo->exec("TRUNCATE TABLE {$this->table}");
does not get rolled back. Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
TRUNCATE
无法回滚。请改用DELETE
。TRUNCATE
cannot be rolled back. UseDELETE
instead.假设您使用 MySQL,TRUNCATE TABLE 有一个隐式 COMMIT。来自 http://dev.mysql.com/doc 的文档/refman/5.0/en/truncate-table.html:
Assuming you're using MySQL, TRUNCATE TABLE has an implicit COMMIT. From the documentation at http://dev.mysql.com/doc/refman/5.0/en/truncate-table.html :