PHP PDO 事务问题
Posted
技术标签:
【中文标题】PHP PDO 事务问题【英文标题】:PHP PDO transaction issues 【发布时间】:2011-09-20 21:10:28 【问题描述】:我有一个简单的 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");
不会回滚。有什么想法吗?
【问题讨论】:
一个字符串(正在工作)。但是,如果我故意在其中放入语法错误以使其抛出异常,则当它回滚时,它不会回滚到擦除表发生之前 【参考方案1】:TRUNCATE
无法回滚。请改用DELETE
。
【讨论】:
有了这个保留表和它的结构?我只想删除数据而不是表本身。 @Headspin:DELETE FROM table
--- 将删除所有行(虽然会更慢,但支持回滚)
@Headspin: DELETE FROM tablename
【参考方案2】:
假设您使用的是 mysql,TRUNCATE TABLE 有一个隐式 COMMIT。来自http://dev.mysql.com/doc/refman/5.0/en/truncate-table.html 的文档:
As of MySQL 5.0.8, truncate operations cause an implicit commit. Before 5.0.8, truncate operations are not transaction-safe; an error occurs when attempting one in the course of an active transaction.
【讨论】:
以上是关于PHP PDO 事务问题的主要内容,如果未能解决你的问题,请参考以下文章