php - 使用 mysqli_insert_id() 有多安全,如果不安全,我应该使用什么?

标签 php mysql mysqli

我有一个非常简单的问题,我想知道我在 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/

相关文章:

php - SQL执行顺序

php - array_push 后数组为空

php - 网站的 SQL 数据库存储有哪些替代方案?

php - 从主表中选择 1 行并从相关表中选择多行

php - 如何在 phpMyAdmin 中填充数据库的多个表

mysql - 使用mysql替换img src?新手

php - 如何检查用户是否存在于MySQL数据库中?

php - 将发布的密码与 MySQL 存储的加密密码进行比较

php - MySQL复杂多表计数

PHP 中的 JavaScript(wordpress)