【问题标题】:Can you trust mysql_insert_id? [duplicate]你能信任 mysql_insert_id 吗? [复制]
【发布时间】:2013-12-16 18:24:26
【问题描述】:

我有一个注册页面,然后将数据插入 MySQL 的两个表中。第一个是用户名/密码/电子邮件等技术信息,另一个是姓名/地址等个人信息。

我的技术信息表有一个主键自动增量ID,然后,一旦我在这个表中创建了行,我立即在通用信息表中创建另一个具有相同ID的行。

为了获得该 ID,我在第一个插入查询之后使用了 mysql_insert_id() 函数。

我的问题比较笼统:你真的可以相信这个函数一定会返回适当的索引吗?如果我有一个每秒有很多用户注册的网站,它仍然可靠吗?并始终返回 ID?还是只返回生成的表的最后一个主键?

【问题讨论】:

  • “如果我有一个网站,每秒钟都有很多用户注册” --- 是的,它是 100% 可靠的。每个连接一个用户。
  • 只是好奇,您为什么首先将技术和个人信息分别保存在不同的表格中?
  • 另外,mysql_insert_id 不再受支持。您应该使用mysqli_insert_id() (mysqli) 或PDO::lastInsertId() (PDO)。
  • 您应该使用的必要提醒:mysqli_insert_id() 或 PDO::lastInsertId()
  • @PaparazzoKid 打败了我:p

标签: php mysql indexing


【解决方案1】:

是的,你可以。

该函数是每个会话的,但它也只对最后一个查询有效。

也就是说,您永远不会有一个用户“污染”另一个用户的 last_insert_id,但是您无法从两次插入之前恢复 insert_id。当您需要连续进行多次插入并且稍后才需要这些 id 时,请将它们设置为变量:

INSERT INTO ...
SET @foo_id = LAST_INSERT_ID();
INSERT INTO ...
SET @bar_id = LAST_INSERT_ID();
INSERT INTO some_join_table VALUES (@foo_id, @bar_id);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 2018-07-29
    • 2018-10-06
    • 2014-04-24
    • 2020-12-23
    • 2015-12-09
    • 1970-01-01
    相关资源
    最近更新 更多