Php 在事务的中间使用MySqLIxTytIdId()

Php 在事务的中间使用MySqLIxTytIdId(),php,mysql,Php,Mysql,如果我开始一个事务,并在其中插入多个INSERT(pre-COMMIT),mysql\u INSERT\u id()似乎不会在每个事务之后更新 这是预期的行为吗?如果是这样,我该怎么做才能得到我刚才插入的东西的ID?你的假设是错误的。下面是证明这一点的代码: mysql_query('CREATE TABLE `test` ( `ID` int(10) unsigned NOT NULL AUTO_INCREMENT, `Name` v

如果我开始一个事务,并在其中插入多个
INSERT
(pre-
COMMIT
),
mysql\u INSERT\u 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());

有趣的是,即使回滚事务(而不是提交事务),结果也将是相同的,并且这些ID的值将不再使用。因此,下一次插入将从4开始。

Yep。。结果发现它只是没有插入新行
1
2
3