【问题标题】:PHP MySQL INSERT fails due to unique constraint由于唯一约束,PHP MySQL INSERT 失败
【发布时间】:2010-05-03 04:57:54
【问题描述】:

在插入时,我正在捕获唯一约束 mysql_errno() 1062。

这很好,但我想找到现有的行来恢复或修改它。

是否有方法在插入失败时获取行 ID?我尝试了 mysql_insert_id() 但意识到这只会返回我正在插入(或未能插入)的行,因此我得到 0。

除了发出另一个 mysql_query 并简单地对重复值执行选择之外别无选择?

我只是想确保没有更好、更快、更经济的方法来做到这一点。

【问题讨论】:

  • 别无他法,只能先选择。

标签: php mysql unique-constraint mysql-error-1062


【解决方案1】:

如果您尝试插入新行或更新现有值,那么REPLACE INTO 就是您所需要的。如果涉及到约束,也请考虑INSERT ... ON DUPLICATE KEY UPDATE Syntax,因为 REPLACE INTO 将删除然后插入。

【讨论】:

  • 不替换成删除现有行吗?我想在覆盖之前查看行和内容,或者至少给用户修改它的选项。
  • 确实如此 - 如果您需要检索该行(如果它已经存在),那么除了使用 SELECT 语句之外我看不到其他选项。
【解决方案2】:

您必须检查表中是否有任何“唯一”键(SHOW CREATE TABLE 将列出所有键),然后在表中查询您尝试的插入查询中的关联值。因此,如果您插入的字段 A、B、C、D 和 B、C 具有唯一键,那么:

SELECT id, B, C FROM table WHERE B=$B and C=$C;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-28
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多