MySQL如何避免PHP中的重复条目

时间:2014-05-01 04:44:03

标签: php mysql sql duplicates unique

我认为最有效的方法是在表上创建UNIQUE字段,而不是在执行任何其他操作之前选择检查现有值,但这会使用两个查询。相反,使用UNIQUE字段只需要一个查询,因为MySQL会为您检查。问题是重复的条目错误导致内部服务器错误,我无法在PHP中恢复。你们有什么建议,什么是避免重复输入PHP和PHP的最佳方法? MySQL应用程序?

4 个答案:

答案 0 :(得分:2)

  1. 使用ON DUPLICATE KEY
  2.   

    INSERT INTO someTable(id,amount)VALUES($ to_uid,$ send_amount)   ON DUPLICATE KEY UPDATE amount = amount + $ send_amount

    https://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

    2)您可以捕获重复的密钥异常。 PDO示例:

    try{
        $stmt->execute(...);
    }
    catch(PDOException $e){
        if($e->errorInfo[1] == 1062){
            // Mysql returned 1062 error code which means a duplicate key
        }
    }
    

答案 1 :(得分:0)

您可以使用REPLACE INTO进行查询,它会先尝试插入,然后删除具有相同ID的行并替换它。

答案 2 :(得分:0)

找到解决方案!

CodeIgniter需要设置

$db['default']['stricton'] = TRUE;

明确调用

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

为了让MySQL抛出异常。也必须抓住例外情况。

答案 3 :(得分:0)

您可以使用INSERT IGNORE来阻止更新行,并防止在行已存在时抛出异常。

  

https://dev.mysql.com/doc/refman/5.5/en/insert.html

     

如果使用IGNORE关键字,则执行时会出现错误   INSERT语句被忽略。例如,没有IGNORE,就是一行   复制表中的现有UNIQUE索引或PRIMARY KEY值   导致重复键错误,语句被中止。同   IGNORE,仍然没有插入行,但没有发生错误。忽视   错误可能会产生警告,尽管重复键错误会产生警告   不