加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – PDO:交易不回滚?

发布时间:2020-12-13 14:05:52 所属栏目:PHP教程 来源:网络整理
导读:我正在讨论关于PDO的 this tutorial,并且已经谈到了关于交易的问题.跳过连接部分,我有这个PHP代码: try{ $db-beginTransaction(); $db-exec('DROP TABLE IF EXISTS animals'); $db-exec('CREATE TABLE animals (' .'animal_id MEDIUMINT(8) NOT NULL AUTO_I
我正在讨论关于PDO的 this tutorial,并且已经谈到了关于交易的问题.跳过连接部分,我有这个PHP代码:
try
{
    $db->beginTransaction();

    $db->exec('DROP TABLE IF EXISTS animals');

    $db->exec('CREATE TABLE animals ('
        .'animal_id MEDIUMINT(8) NOT NULL AUTO_INCREMENT PRIMARY KEY,'
        .'animal_type VARCHAR(25) NOT NULL,'
        .'animal_name VARCHAR(25) NOT NULL)'
        .'ENGINE=INNODB');

    $db->exec('INSERT INTO animals (animal_type,animal_name) VALUES ("emu","bruce")');
    $db->exec('INSERT INTO animals (animal_type,animal_name) VALUES ("funnel web",animal_name) VALUES ("lizard",animal_name) VALUES ("dingo",animal_name) VALUES ("kangaroo",animal_name) VALUES ("wallaby",animal_name) VALUES ("wombat",animal_name) VALUES ("koala",animal_name) VALUES ("kiwi","bruce")');

    $db->commit();

    echo 'Table re-created and data entered successfully.';
}
catch(PDOException $e)
{
    $db->rollback();

    echo $e->getMessage();
}

它运行得很好,就像我想的那样,除非我在某个地方输入错误.就像我在第四个插入语句中创建了一个错误一样,我会在我的数据库中找到三个动物.但是我认为事情应该被回滚,这意味着我会在运行此脚本之前找到数据库.

我误解了什么吗?我错过了什么?事务和回滚函数是否做了我认为他们应该做的事情? drop和create语句是否以某种方式“破坏”了事务?这里发生了什么?

更新:如果我移动$db-> beginTransaction();行,所以只有在创建表之后才开始事务,我得到了我期待的行为.因此,如果第三个insert语句失败了,那么在回滚事务之后我会有一个空表(因为它刚刚被重新创建).仍然想知道为什么当drop和create语句在事务中时它不起作用…

查看PHP参考手册: PDO::beginTransaction

Some databases,including MySQL,automatically issue an implicit COMMIT when a database definition language (DDL) statement such as DROP TABLE or CREATE TABLE is issued within a transaction. The implicit COMMIT will prevent you from rolling back any other changes within the transaction boundary.

这解释了为什么会发生这种情况,这是MySQL的局限性,而不是PDO / PHP的局限性.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读