php - 在事务中间使用 mysql_insert_id()

标签 php mysql

如果我开始一个事务,并在其中进行多个INSERT(pre-COMMIT),mysql_insert_id() 似乎没有更新每一个。

这是预期的行为吗?如果是这样,我该怎么做才能获得我刚刚插入的内容的 ID?

最佳答案

你的假设是错误的。这是证明它的代码:

mysql_query('CREATE TABLE `test` (
               `ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
               `Name` varchar(255) NOT NULL,
                PRIMARY KEY (`ID`)
             ) ENGINE=InnoDB') or die(mysql_error());
mysql_query('SET AUTOCOMMIT=0') or die(mysql_error());
mysql_query('START TRANSACTION') or die(mysql_error());
mysql_query("INSERT INTO test VALUES (NULL, 'Martin')") or die(mysql_error());
echo mysql_insert_id().'<br />';
mysql_query("INSERT INTO test VALUES (NULL, 'Dani')") or die(mysql_error());
echo mysql_insert_id().'<br />';
mysql_query("INSERT INTO test VALUES (NULL, 'Pesho')") or die(mysql_error());
echo mysql_insert_id().'<br />';
mysql_query('COMMIT') or die(mysql_error());
mysql_query('SET AUTOCOMMIT=1') or die(mysql_error());

这个简单代码的输出是:

1
2
3

有趣的是,即使您回滚事务(而不是提交事务),结果也是一样的,并且这些 ID 的值将永远不会被再次使用。所以下一个插入将从 4 开始。

关于php - 在事务中间使用 mysql_insert_id(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8128529/

相关文章:

PHP7.1 和 Laravel 5.3 : Function mcrypt_get_iv_size() is deprecated

mysql - 如何使用 group by 子句选择随机行?

javascript - CORS 问题 - "No ' Access-Control-Allow-Origin header 出现在请求的资源上。”

mysql - SQL查询返回错误的结果集

MySQL 触发器没有像它应该的那样执行

php - 表单中的值未正确显示在数据库中

php - 如何将我的 codeigniter 项目放到我的主机帐户 (iPage) 上?

PHP 扩展类使子级继承相同的静态属性

PHP从数组值中形成类似 "A, B, C, and D"的字符串

mysql - 在Shiny应用程序中,如果发生任何更改,如何每10分钟刷新MySQL数据库中的数据