PHP MYSQL PDO -> Неустранимая ошибка 23000, хотя существует специальная процедура

У меня есть таблица в моем db. Моя таблица имеет несколько полей, в том числе поле с автоматически увеличивающимся идентификатором, заданное как первичный ключ, и другое поле, называемое ссылкой, которое я установил как уникальный. Чтобы заполнить эту таблицу, у меня есть php-скрипт, который вставляет записи в эту таблицу с помощью pdo. Каждый раз, когда вставка была успешно выполнена (это означает, что «ссылка» не существует в таблице), я увеличиваю переменную с именем $ newOnes. Если значение 'reference' уже находится в таблице, запускается исключение с кодом 23000. В этом случае я увеличиваю другую переменную с именем $ doublons. К сожалению, мой скрипт запускает фатальную ошибку с исключением 23000, когда цикл while обрабатывает последнюю запись таблицы . И я не понимаю. Спасибо заранее за вашу помощь. Приветствия. Марк.

Мой PHP-код:

try { $connexion = connexion('localhost', 'user', 'user', 'mydb'); $connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $qry_bat = $connexion->query('SELECT...'); $ins_db = $connexion->prepare('INSERT...'); } catch (PDOException $e) { echo $e->getMessage(); } while($row = $qry_bat->fetch(PDO::FETCH_ASSOC)) { try { $ins_db->execute(array(...)); $newOnes++; } catch (PDOException $e) { if ($e->getCode() != 23000) { echo '<span class="msg-alert">'.$e->getMessage().'</span>'; } else { $doublons++; } } } 

Неустранимая ошибка, которую я получаю (обратите внимание, что строка 22 относится к строке while (…)):

 Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'theFieldContentOfTheLastRecordOfTheTable' for key 'theFieldNameReference' in /myFilePath/file.php:22 Stack trace: #0 /myFilePath/file.php(22): PDOStatement->fetch(2) #1 {main} thrown in /myFilePath/file.php on line 22 

РЕДАКТИРОВАТЬ //////////

оригинальная таблица (вещи, чтобы упомянуть):
auto incremented id

таблица для вставки (вещи, которые следует упомянуть):
auto увеличивается на поле id
УНИКАЛЬНЫЙ ИНДЕКС по ссылке

Solutions Collecting From Web of "PHP MYSQL PDO -> Неустранимая ошибка 23000, хотя существует специальная процедура"

( Обновление до ответа )

Похож на эту ошибку , которая по-прежнему открыта почти через пять лет; попробуйте вместо этого:

 while (true) { try { $row = $qry_bat->fetch(PDO::FETCH_ASSOC); if (!$row) break; $ins_db->execute(array(...)); $newOnes++; } catch (PDOException $e) { if ($e->getCode() != 23000) { echo '<span class="msg-alert">'.$e->getMessage().'</span>'; } else { $doublons++; } } } 

Трассировка стека показывает исключение, происходящее в выборке, которая находится вне блоков try / catch.

Оператор SELECT запускает:

 Integrity constraint violation: 1062 Duplicate entry 'theFieldContentOfTheLastRecordOfTheTable' 

Существует уникальный ключ с именемFieldContentOfTheLastRecordOfTheTable, с которым он сталкивается.

Можете ли вы опубликовать схему для нас, чтобы увидеть, как это может повлиять на целостность?

Посмотрите на наличие грязных / повторяющихся данных в этой колонке. Некоторые приложения позволяют использовать «свободное» ограничение ПОСЛЕ того, как данные уже захвачены. Это может произойти в вашем случае.