复制时停止插入

时间:2014-10-12 04:57:10

标签: php mysql arrays mysqli explode

我有这个代码从数组中插入电子邮件。电子邮件列设置为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);  

我想要做的是在找到重复的错误代码ALL后停止1062插入。问题是阵列中的某些电子邮件并不是唯一的,因此仍然会发生插入。如何阻止插入阵列中是否有唯一或非唯一的电子邮件?

我知道我可以SELECT并与$pieces数组进行比较,但我现在只尝试INSERT。有可能吗?

更新:我实际上尝试使用mysqli_affected_rowmysqli_errno($con)来设置我自己的错误代码并将其提供给用户。问题是,即使在阵列中获得了唯一的电子邮件,插入仍然会发生,因此我的错误代码无效,这就是为什么我认为我需要在插入过程中阻止它们。

2 个答案:

答案 0 :(得分:1)

在循环中每次插入后检查响应,而不是执行所有插入,然后检查结果(most recent function call)。

答案 1 :(得分:0)

这就是我解决它的方式。通过使用事务(提交)。

        $pieces = explode(",", $email);

        $total_pieces = count($pieces);

if (!empty($email)){
        //insert
    $total = 0;

    mysqli_autocommit($con, FALSE); //http://stackoverflow.com/questions/12091971/how-to-start-and-end-transaction-in-mysqli

    foreach ($pieces as $value) {
      //echo "$value <br>";
        $result = mysqli_query($con,"INSERT INTO name (`email`, `email_id`) VALUES ('$value', '$id')");

        if ($result){   
                $total = $total + count($value); // the total that succesfully insert not including duplicate.
        }

    }

    if ($total_pieces == $total){
        mysqli_commit($con); //INSERT INTO aren't auto committed because of the autocommit(FALSE)
        $response = 1;  //record updated
    }
    else{
        $response = 0; // duplicate record found!
    }


}   
else{

            $response = 2; // no record updated

}           

            $display = array('response' => $response);
            echo json_encode($display);  

感谢这里的每个人给我这个想法,并试图提供帮助。