使用 mysqli_insert_id() 有多安全?如果不安全,我应该使用什么?
How safe is to use mysqli_insert_id() and if not what should I use?
我有一个非常简单的问题,我想知道我在 MySql 数据库中插入的最后一个查询的 ID。
使用 mysqli_insert_id() 既安全又高效,如果不是,我应该使用什么?
根据 documentation:
The mysqli_insert_id() function returns the ID generated by a query (usually INSERT) on a
table with a column having the AUTO_INCREMENT attribute. If no INSERT
or UPDATE statements were sent via this connection, or if the modified
table does not have a column with the AUTO_INCREMENT attribute, this
function will return zero.
就是说,如果您坚持使用 mysqli
(插入或更新)的 table 具有带有 AUTO_INCREMENT 属性的主键列,则可以安全地使用 mysqli_insert_id()
.
是的,这是在使用自动递增时检索由插入生成的 ID 值的推荐方法。但它有局限性,这些局限性已记录在案。您阅读文档了吗?
mysqli_insert_id()
函数 return 与内置 SQL 函数 LAST_INSERT_ID() 编辑的值相同 return。
请注意,它仅在您插入并生成 ID 后在同一会话中有效。您无法获取上一次会话中生成的最后一个 ID。
例如,它在 phpMyAdmin 中根本不起作用,因为 PHP 的“无共享”性质是每个查询都在不同的会话中执行。
它也仅在您的主键是自动递增键时有效,和如果您最后一次插入使用自动递增机制。即使您的 table 具有自动增量,您也可以通过指定一个值来覆盖它。那么最后的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 |
+------------------+
为什么这个 return 0?因为我的插入没有生成一个ID,它只是使用了我在插入中指定的ID值。
它只 return 生成了 最新的 ID。如果您执行另一个生成 ID 的后续插入,它将 return 最近生成的 ID。
它不会告诉您ID 是由哪个table 生成的。您可以自行了解最近插入的 table,它使用自动递增生成 ID。
总而言之,是的,它是正确的功能,但您确实需要了解它的工作原理以及如何使用它。
我有一个非常简单的问题,我想知道我在 MySql 数据库中插入的最后一个查询的 ID。
使用 mysqli_insert_id() 既安全又高效,如果不是,我应该使用什么?
根据 documentation:
The mysqli_insert_id() function returns the ID generated by a query (usually INSERT) on a table with a column having the AUTO_INCREMENT attribute. If no INSERT or UPDATE statements were sent via this connection, or if the modified table does not have a column with the AUTO_INCREMENT attribute, this function will return zero.
就是说,如果您坚持使用 mysqli
(插入或更新)的 table 具有带有 AUTO_INCREMENT 属性的主键列,则可以安全地使用 mysqli_insert_id()
.
是的,这是在使用自动递增时检索由插入生成的 ID 值的推荐方法。但它有局限性,这些局限性已记录在案。您阅读文档了吗?
mysqli_insert_id()
函数 return 与内置 SQL 函数 LAST_INSERT_ID() 编辑的值相同 return。
请注意,它仅在您插入并生成 ID 后在同一会话中有效。您无法获取上一次会话中生成的最后一个 ID。
例如,它在 phpMyAdmin 中根本不起作用,因为 PHP 的“无共享”性质是每个查询都在不同的会话中执行。
它也仅在您的主键是自动递增键时有效,和如果您最后一次插入使用自动递增机制。即使您的 table 具有自动增量,您也可以通过指定一个值来覆盖它。那么最后的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 |
+------------------+
为什么这个 return 0?因为我的插入没有生成一个ID,它只是使用了我在插入中指定的ID值。
它只 return 生成了 最新的 ID。如果您执行另一个生成 ID 的后续插入,它将 return 最近生成的 ID。
它不会告诉您ID 是由哪个table 生成的。您可以自行了解最近插入的 table,它使用自动递增生成 ID。
总而言之,是的,它是正确的功能,但您确实需要了解它的工作原理以及如何使用它。