我认为最有效的方法是在表上创建UNIQUE
字段,而不是在执行任何其他操作之前选择检查现有值,但这会使用两个查询。相反,使用UNIQUE
字段只需要一个查询,因为MySQL会为您检查。问题是重复的条目错误导致内部服务器错误,我无法在PHP中恢复。你们有什么建议,什么是避免重复输入PHP和PHP的最佳方法? MySQL应用程序?
答案 0 :(得分:2)
ON DUPLICATE KEY
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,仍然没有插入行,但没有发生错误。忽视 错误可能会产生警告,尽管重复键错误会产生警告 不