Остановить вставку на дубликате

У меня есть этот код, который вставляет электронную почту из массива. Столбец электронной почты установлен на 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_row а также mysqli_errno($con) установить свой собственный код ошибки и дать его пользователю. Проблема в том, что даже если в массиве получено уникальное письмо, вставка все равно происходит, поэтому мой код ошибки становится бесполезным, поэтому я думаю, что мне нужно остановить их все во время вставки.

0

Решение

Проверяйте ответ после каждой вставки в цикле, вместо того, чтобы делать все вставки, а затем проверять результат (из самый последний вызов функции).

1

Другие решения

Вот как я это решил. Используя транзакцию (commit).

        $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);

Спасибо всем здесь, которые дают мне идею и пытаются помочь.

0

По вопросам рекламы [email protected]