在没有竞争条件的情况下在 PHP/MySQL 中插入行后获取 'id' 字段
当使用以下命令将行插入到 MySQL 表中时自动递增的“id”字段,通常需要检索该“id”值以在后续操作中使用。然而,简单地插入行,然后在数据库中查询“id”,如果同时插入另一行,可能会导致竞争条件。
确保“id”检索完整性的可靠方法是使用 mysqli_insert_id() 函数。此函数返回在当前连接上执行的最后一个 INSERT 语句生成的 ID。
以下是实现它的方法:
$link = mysqli_connect('127.0.0.1', 'my_user', 'my_pass', 'my_db'); mysqli_query($link, "INSERT INTO mytable (1, 2, 3, 'blah')"); $id = mysqli_insert_id($link);
另一种方法(但不推荐)是插入使用 LAST_INSERT_ID() 将行放入主表中,并将相应行放入第二个表中,该第二个表在单个原子事务中引用主表的“id”
mysqli_query($link, "INSERT INTO my_user_table ...; INSERT INTO my_other_table (`user_id`) VALUES (LAST_INSERT_ID())");
请注意,每个 MySQL 连接单独跟踪 'id' 值,防止并发插入时发生冲突。
以上是如何在没有竞争条件的情况下在 PHP 中检索 MySQL 插入后的自动递增 ID?的详细内容。更多信息请关注PHP中文网其他相关文章!