【发布时间】:2014-10-12 04:57:09
【问题描述】:
我有这个从数组插入电子邮件的代码。电子邮件列设置为unique,因此不应发生重复。
$pieces = explode(",", $email);
if (!empty($pieces)){
foreach ($pieces as $value) {
mysqli_query($con,"INSERT INTO name (`email`, `email_id`) VALUES ('$value', '$id')");
}
$num = mysqli_affected_rows($con);
if($num != 0){
$response = 1; // all record inserted
}
if (mysqli_errno($con) == 1062) {
$response = 0; // duplicate entry, ALL RECORD SHALL NOT INSERTED.
}
}
else{
$response = 2; // empty string, no query
}
$display = array('response' => $response);
echo json_encode($display);
我想做的是在找到重复的错误代码1062 后停止ALL 插入。问题是数组中的一些电子邮件不是唯一的,所以插入仍然发生。如何防止插入数组中是否存在唯一或非唯一电子邮件?
我知道我可以SELECT 并与$pieces 数组进行比较,但我现在只尝试做INSERT。有可能吗?
更新:我实际上尝试使用mysqli_affected_row 和mysqli_errno($con) 设置我自己的错误代码并将其提供给用户。问题是即使在数组中得到唯一的电子邮件,插入仍然发生,所以这使我的错误代码无用,这就是为什么我认为我需要在插入期间停止它们。
【问题讨论】:
-
这可能有点明显,但您的错误检查器在循环完成之前永远不会触发?
-
也许您应该使用 SELECT + NOT IN ($email) 来获取不存在的电子邮件,然后才插入它?在我看来,依靠错误而不是自己检查是很奇怪的想法。 P.S.:您忘记分配从
mysqli_query收到的资源 id。 -
如果这是生产代码,从安全的角度来看,这是一个非常糟糕的主意。
-
你应该考虑使用事务,如果有重复,那么不要提交。
标签: php mysql arrays mysqli explode