2010-05-03 58 views
1

在插入我赶上了唯一约束mysql_errno()1062PHP MySQL的INSERT失败,因为唯一约束

这工作得很好,但我想找到现有的行复权或修改。

是否有方法可以在插入失败时获取行ID?我试过mysql_insert_id()但意识到只会返回我插入的行(或插入失败),因此,我得到0.

是否有没有选择,只能发出另一个mysql_query,只需执行select值?

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

+0

除了首先选择其他方式。 – 2010-05-03 05:16:16

回答

2

如果您正试图插入行,如果新的或更新现有的值,然后REPLACE INTO是你需要的。如果存在约束,则考虑INSERT ... ON DUPLICATE KEY UPDATE Syntax,因为REPLACE INTO将DELETE,然后INSERT。

+0

不替换删除现有的行吗?我想在覆盖之前看到该行和内容,或者至少让用户选择修改它。 – sjw 2010-05-03 05:05:39

+0

它确实 - 如果你需要检索行,如果它已经存在,那么除了使用SELECT语句之外,我不会看到其他任何选项。 – 2010-05-03 05:07:36

0

您必须检查表中是否存在任何“唯一”键(SHOW CREATE TABLE会将它们全部列出),然后在您尝试的插入查询中查询表中的关联值。所以,如果你要插入域A,B,C,d和B,C对他们的唯一键,则:

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