【问题标题】:Update on duplicate entry更新重复条目
【发布时间】:2015-10-27 09:00:53
【问题描述】:

在我的User 表中,phone 是唯一的。因此,当我插入重复的电话号码时,我想更新deviceIdregistrationId 并且我想要更新的id。我试过了,但它不起作用。

$stmt1 = $db->prepare("INSERT into User (name,phone, deviceId,registrationId) values(:name,:phone, :deviceId,:registrationId)  ON DUPLICATE KEY UPDATE deviceId = :deviceId, registrationId = :registrationId, id=lastInsertId(id)");

谢谢你..

【问题讨论】:

  • 你的主键是什么?我猜重复更新是使用主键,尝试设置电话号码是你的主键然后尝试。
  • 只要您的“电话”值是唯一/主要的,并且如 mysql 文档中所述,这应该可以工作“INSERT INTO table (a,b,c) VALUES (1,2,3) ON重复密钥更新 id=LAST_INSERT_ID(id), c=3;" ..
  • 你必须在你的表中添加约束 ON UPDATE 到 NO ACTION 的外键。
  • 你能说得更具体些吗,因为“它不工作”不是很清楚。 on duplicate 没有触发,id 没有返回吗?什么?

标签: php mysql prepared-statement


【解决方案1】:

与 OP 聊天后,问题是更新记录时他没有获得 ID。最终的解决方案是使用id=LAST_INSERT_ID(id) 这样ON DUPLICATE KEY UPDATE 将设置id,然后使用$db->lastInsertId(); 获取id

$stmt = $db->prepare("INSERT into User (name,phone, deviceId,registrationId) values(:name, :phone, :deviceId,:registrationId)  ON DUPLICATE KEY UPDATE deviceId = :deviceId, registrationId = :registrationId, id=LAST_INSERT_ID(id)");

然后获取插入后的id。

$id = $db->lastInsertId();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 2013-10-31
    • 2019-04-17
    • 2018-06-05
    • 1970-01-01
    • 2019-06-19
    • 2021-07-07
    相关资源
    最近更新 更多