我有一个非常简单的问题,我想知道我在 MySql 数据库中插入的最后一个查询的 ID。
使用 mysqli_insert_id() 是安全高效的,如果不是,我应该使用什么?
最佳答案
是的,这是在使用自动增量时检索由插入生成的 ID 值的推荐方法。但它有局限性,这些局限性已记录在案。您阅读文档了吗?
mysqli_insert_id()
函数返回与内置 SQL 函数相同的值 LAST_INSERT_ID() .
请注意,它仅在您插入并生成 ID 后在同一 session 中起作用。您无法获取上一次 session 中生成的最后一个 ID。
例如,它在 phpMyAdmin 中根本不起作用,因为 PHP 的“无共享”特性是每个查询都在不同的 session 中执行。
它也仅在您的主键是自动递增键时才有效,并且如果您的最后一次插入使用了自动递增机制。即使您的表具有自动增量,您也可以通过指定一个值来覆盖它。那么最后的insert id就没有意义了。示范:
mysql> create table t (id serial primary key);
mysql> insert into t set id = 42;
mysql> select last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
| 0 |
+------------------+
为什么返回 0?因为我的插入没有生成 ID,它只是使用了我在插入中指定的 ID 值。
它只返回生成的最新 ID。如果您执行另一个生成 ID 的后续插入,它将返回最近生成的 ID。
它不会告诉您哪个表 ID 是由生成的。您可以自行了解最近插入到哪个表,该表使用自增生成 ID。
总而言之,是的,它是正确使用的功能,但您确实需要了解它的工作原理以及如何使用它。
关于php - 使用 mysqli_insert_id() 有多安全,如果不安全,我应该使用什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65909221/