使用 PDO 自动提交
Posted
技术标签:
【中文标题】使用 PDO 自动提交【英文标题】:Autocommit with PDO 【发布时间】:2017-12-27 08:09:49 【问题描述】:我的事务回滚不起作用。 如何在使用 PDO 的 php 脚本中将 autocommit 设置为 false(或 0)(我有 InnoDB 5.7.18)?
这是我的代码:
global $bdd; //defined with PDO
try
$bdd->beginTransaction();
/* my requests */
$bdd->commit();
catch (Exception $e)
$bdd->rollBack();
return $e->getMessage();
return true;
【问题讨论】:
PDO::beginTransaction () 方法禁用自动提交模式。 【参考方案1】:我自己解决了我的问题:我的一些表在 MyISAM 中(而大多数在 InnoDB 中 -> 我使用旧的数据库系统...);所以回滚不适用于这些表。一旦我将它们更改为 InnoDB,它就起作用了。 感谢大家的帮助!
【讨论】:
【参考方案2】: $db = new PDO('mysql:dbname=employee');
$db->setAttribute(PDO::ATTR_AUTOCOMMIT,0);
var_dump($db->query('SELECT @@autocommit')->fetchAll());
【讨论】:
感谢您的回答; var_dump 给了我:"array(1) [0]=> array(2) ["@@autocommit"]=> string(1) "0" [0]=> string(1) "0" ”,但是当我进入 mysql “SHOW VARIABLES WHERE Variable_name='autocommit';”时,自动提交仍然是“ON” ....并且回滚仍然不起作用... :( 确保 MySQL 中的 DROP TABLE 或 CREATE TABLE 等数据库定义语言 (DDL) 语句不能在事务中使用。 你试过了吗 - $dbh->setAttribute( PDO::ATTR_AUTOCOMMIT, 0 ); $dbh->beginTransaction(); 是的,我已经尝试过了,我只在我的事务中使用 UPDATE 请求... :(【参考方案3】:尝试设置以下属性:
$bdd->setAttribute(PDO::ATTR_AUTOCOMMIT,0);
【讨论】:
你设置了这个属性吗?在打开与数据库的连接时尝试设置它 它也不起作用...但感谢您的帮助!以上是关于使用 PDO 自动提交的主要内容,如果未能解决你的问题,请参考以下文章