MySQL DELETE随机失败并且很少失败

时间:2013-02-20 14:40:27

标签: php mysql error-handling insert

我有一个MySQL DELETE语句后跟一个INSERT语句,以确保只有一个给定ID数据集的副本。 (我有理由不使用UPDATE)

问题是我注意到在一个跨越5000多个条目的数据集中有3个实例,其中DELETE语句没有执行,但是INSERT语句没有。最终结果是给定ID的重复条目。

以下是我的代码。执行失败时,php脚本将退出并显示错误消息。这一定是我的经验水平。任何想法可能是什么问题?

//delete
$query_delete = "DELETE FROM q1_6_list WHERE q_id = '".mysql_real_escape_string($q[qID])."'";   
$result = mysql_query($query_delete) or errorReport("Error in query: $query_delete. ".mysql_error());
//insert
$query_insert = "INSERT INTO q1_6_list (q_id, vehicle, quantity) VALUES";
$result = mysql_query($query_insert) or errorReport("Error in query: $query_insert. ".mysql_error());
if (!$result)
    errorReport($result);   

修改

仔细观察后,我注意到我没有在$result = mysql_query($query_delete)....

之后添加以下代码
if (!$result)
    errorReport($result);   

是否还需要捕获所有其他错误消息,或mysql_query($query_delete) or errorReport...是否会捕获所有错误消息?

2 个答案:

答案 0 :(得分:1)

这里最好的办法是在q1_6_list(q_id)上创建一个主键:

ALTER TABLE q1_6_list ADD PRIMARY KEY(q_id)

并使用MySQL REPLACE INTO语法,因此丢失您的删除,您的插入变为:

$query_insert = "REPLACE INTO q1_6_list (q_id, vehicle, quantity) VALUES";

答案 1 :(得分:0)

只有在删除查询成功时才能运行插入查询:

if (mysql_query($query_delete)) {
    mysql_query($query_insert);
}