Php 检查记录是否存在,如果找到或创建了记录,则返回其ID?

Php 检查记录是否存在,如果找到或创建了记录,则返回其ID?,php,mysql,insert,ezsql,Php,Mysql,Insert,Ezsql,可能重复: 是否可以执行单个查询来查找记录并返回其ID或插入它并返回其ID?以下是我的想法,也许对这个有用: INSERT INTO firstname (id, name) VALUES (NULL,'$name') ON DUPLICATE KEY UPDATE name ='$name', id=LAST_INSERT_ID(id) 如果有帮助的话,我正在使用ezSQL,只需执行$db->查询(“…”)然后是$id=$db->insert\u id获取插入id并在变量中使用它。您可以

可能重复:

是否可以执行单个查询来查找记录并返回其ID或插入它并返回其ID?以下是我的想法,也许对这个有用:

INSERT INTO firstname (id, name) VALUES (NULL,'$name') 
ON DUPLICATE KEY UPDATE name ='$name', id=LAST_INSERT_ID(id)

如果有帮助的话,我正在使用ezSQL,只需执行
$db->查询(“…”)然后是
$id=$db->insert\u id
获取插入id并在变量中使用它。

您可以编写自己的存储过程来检查现有记录

  • 尝试按记录的id检索该记录
  • 检查是否为空,然后插入它
  • 否则你就要吵架了

  • 我不知道我是否明白你需要什么


    调用INSERT INTO后。。。在重复密钥更新时。。。您只需从数据库中获取最后一个\u insert\u id(),就可以了。

    如果用户问同一个问题两次,我总是投反对票,但我始终不知道为什么会发生这种情况!这主要是因为第一个问题已经半小时没有答案了,而且它已经通过了头版,然后我发布了这个问题,并在8分钟内收到了答案。目前,我让它选择数据库中的所有项目并将它们放入数组,然后进行数组搜索,以确定数组中是否有内容。我试图避免这种情况,因为现在数据库中有超过1500万条记录,而脚本的这一部分占用了大量内存,可能有20个脚本实例同时运行,这完全填满了系统内存。这就是为什么我告诉您要编写存储过程,您不需要这样做,如上所述,发出SELECT语句以查看该行是否存在,如果它不返回任何行,请执行INSERT,您的问题中的SQL应该被抛出。非常感谢@on_u,这非常有效,正是我所寻找的。明白了。我想我对这个查询的作用感到困惑。如果它正在更新旧记录的ID,这不会弄乱引用旧ID的任何其他表吗?