Codeigniter的insert_id()函数能正确检索最后插入的id吗?

5

我大约3到4年前开始编程,我还记得在2005年的某本PHP安全书中提到了使用mysql_insert_id来检索last_insert_id时的安全问题。

书中指出,如果同时有几个请求发送到服务器(数千个),可能会导致检索last_insert_id错误,从而将用户的id指向其他用户。

现在我们已经进入2013年了,你们对此有何看法,尤其是使用codeigniter insert_id()。

附注:我试图在其他地方找到与我的问题相关的信息,但没有找到具体的内容。

1个回答

7

那本书的作者充满废话。 LAST_INSERT_ID() 是特定于连接的,而连接是特定于当前脚本调用的。我想不出除了在狂欢之夜之后重新编写一些 PHP 源代码外,还有其他方式来打破这个问题。

可能,如果您正在使用持久连接,然后如果上一个连接做了插入,然后在自己成功插入之前调用了LAST_INSERT_ID() [您检查了返回值,对吧? ],那么可能可能会得到一个错误的值。但是,我非常难以想象这是可能的。

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

以下是如果您真的愿意打破它的方法:

$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();

谢谢您的评论,由于我的声望不够,我无法为您的答案点赞,但真的非常感谢。 - Jose Faro
@JoseFaro 点击复选框接受答案,这比点赞好多了。 - Sammitch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接