5

我在 3~4 年前开始编程,我记得在 2005 年的一些 php 安全书籍中,关于使用 mysql_insert_id 检索 last_inser_id 的安全性。

书上说如果同时有多个请求(上千个)给服务器,可能会导致last_insert_id的检索出错,最终用户的id指向其他用户。

现在我们是在 2013 年,你们必须对此说些什么,尤其是使用 codeigniter insert_id()。

pd:我试图在其他地方找到关于我的问题的相关信息,但我没有找到具体的东西。

4

1 回答 1

7

写那本书的人全是废话。LAST_INSERT_ID()特定于连接,并且连接特定于脚本的当前调用。经过一夜的酗酒后,如果不重新编写一些 PHP 源代码,我想不出办法来解决这个问题。

也许如果你正在使用持久连接,然后如果最后一个连接进行了插入,然后LAST_INSERT_ID()你在自己成功插入之前调用了[你检查你的返回值,对吗?],那么你可能得到一个不好的值。但是,我很难想象这是可能的。

只要您在刚刚执行LAST_INSERT_ID()完之后立即运行INSERT,它总是会返回正确的值。

如果你真的想要的话,你可以这样做:

$db_obj->insert('some data');
$db_obj->some_function_that_also_inserts_but_i_forgot_it_does_that('derp');
$id = $db_obj->last_insert_id();
于 2013-10-23T21:00:23.313 回答