2013-03-07 98 views
0

“mysql_insert_id - 获取在最后一个查询中生成的ID”mysql_insert_id()如何工作?

想象3个在线用户调用相同的查询,例如,插入表格。 用户一插入表中的行,但用户号。三个将是最后一个调用查询的用户,仅在用户1之后几毫秒。

什么会为用户1返回mysql_insert_id?这是他的Id还是用户三的Id?

如果此功能已被弃用,我可以使用什么?

+0

l00k right - >这个问题的数千个问题已经 – 2013-03-07 15:24:45

+0

可能重复[是mysql \ _insert \ _id线程安全吗?](http://stackoverflow.com/questions/1808337/is-mysql-insert-id线程安全) – legoscia 2014-03-07 18:47:24

回答

2

插入ID被跟踪每个连接。没有持久连接,每个脚本执行都有自己的连接。通过持久连接,每个Apache进程都有自己的MySQL连接(但是每个进程都依次提供结果 - 所以这不是问题)。只要您在与PHP中的INSERT查询具有相同的页面负载范围内调用mysql_insert_id()即可,您没有问题。

要回答问题的第二部分,您应该使用mysqliPDO(首选)库。 mysqli有相应的mysqli_insert_idPDO有一个lastInsertId()方法。

+0

+1,但不同意'(首选)' – Mchl 2013-03-07 15:29:54

+0

@Mchl只是尝试将一个数组绑定到IN()一次,并且您将立即改变主意。 – 2013-03-07 15:38:05

+0

@YourCommonSense哈哈哈。在为什么PDO是一个很好的选择的各种其他原因。它抽象出实现细节。您可以在不必更改代码的情况下在底层数据库之间切换。您只需修改不兼容的查询。 – 2013-03-07 15:43:53