我有一个插入数据库的脚本,同时从2个cron作业调用脚本,所以在很多情况下我可以同时拥有相同的数据(小时,分钟,秒)。 实际上我对cron作业没有控制权,但我在脚本上有它。 那么是否有任何方法可以防止重复行?
代码:
function checkDuplicate($email) {
$return = 0;
if($email != "" ){
$sql = "SELECT d.id_data as nbre FROM data d WHERE d.email = '" . $email . "' ";
$nbreEmails = $db->run($sql);
$return = (sizeof($nbreEmails) > 0) ? 1 : 0;
}
return $return;
}
if(!checkDuplicate($email)){
$insert = array(
"id_client" => $id_client,
"email" => $email,
"valide" => 1,
"stat" => "valide",
"date_insert" => date("Y-m-d H:i:s"),
"date_refus" => null
);
$db->insert("data", $insert);
}
感谢。
答案 0 :(得分:0)
您应该将时间戳字段设置为唯一。
如果你不能设置它,或者有更复杂的条件应该确认脚本1& script2永远不会在同一时间插入(或与此表有关),你应该使用锁表,即:
// not sure waht do you use as $db
$db->execute('LOCK TABLES data WRITE;');
...// inserts
$db->execute('UNLOCK TABLES;');
或使用交易(MySQL)
建议您使用PDO(PDO::beginTransaction)
或者使用您使用的框架名称更新您的帖子,其中大多数应该有办法实现。