Bij gebruik van transacties geeft de php-functie mysql_insert_id() verschillende waarden, afhankelijk van wanneer je het aanroept. Wanneer je mysql_insert_id() aanroept voor de commit, dan is de waarde correct. Echter na de commit is de waarde 0. Mysql “SELECT LAST_INSERT_ID” geeft wel de correcte waarde, maar dan weer niet na een ROLLBACK.
in PHP:
mysql_connect("localhost", "root", ""); mysql_query("CREATE DATABASE insertidtest"); echo "insert a value without transaction:\n"; echo "insert a value with transaction:\n"; echo "insert a value with transaction:\n"; echo "Content of table:\n"; mysql_query("DROP DATABASE insertidtest");
mysql_query("USE insertidtest");
mysql_query("CREATE TABLE lastinsert (id INT PRIMARY KEY AUTO_INCREMENT) TYPE=InnoDB");
mysql_query("INSERT INTO lastinsert VALUES ('')");
echo "\t mysql_insert_id():".mysql_insert_id()."\n";
mysql_query("START TRANSACTION");
mysql_query("INSERT INTO lastinsert VALUES ('')");
echo "\t before commit:mysql_insert_id():".mysql_insert_id()."\n";
mysql_query("COMMIT");
echo "\t after commit:mysql_insert_id():".mysql_insert_id()."\n";
$res = mysql_query("SELECT LAST_INSERT_ID()");
$row = mysql_fetch_row($res);
echo "\t SQL LAST_INSERT_ID():".$row[0]."\n";
mysql_query("START TRANSACTION");
mysql_query("INSERT INTO lastinsert VALUES ('')");
echo "\t before rollback:mysql_insert_id():".mysql_insert_id()."\n";
mysql_query("ROLLBACK");
echo "\t after rollback:mysql_insert_id():".mysql_insert_id()."\n";
$res = mysql_query("SELECT LAST_INSERT_ID()");
$row = mysql_fetch_row($res);
echo "\t SQL LAST_INSERT_ID():".$row[0]."\n";
$res = mysql_query("SELECT * FROM lastinsert");
while ($row = mysql_fetch_row($res)) {
echo "\t$row[0]\n";
}
mysql_close();