PHP MYSQL PDO - >致命错误23000即使有特殊程序也是如此

Mar*_*arc 3 php mysql pdo

我的数据库中有一张表.我的表有几个字段,包括一个自动递增的id字段设置为主键,另一个字段称为'reference',我设置为唯一.为了填充该表,我有一个php脚本,使用pdo在该表中插入记录.每次成功插入(意味着表中不存在'reference')时,我会增加一个名为$ newOnes的变量.如果值'reference'已在表中,则会触发代码为23000的异常.在这种情况下,我增加另一个名为$ doublons的变量.不幸的是,当while循环"处理"表的最后一条记录时,我的脚本会触发异常23000的致命错误.我不明白.预先感谢您的帮助.干杯.渣.

我的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++;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我得到的致命错误(注意第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
Run Code Online (Sandbox Code Playgroud)

编辑//////////

原始表(提到的东西):
自动增加id

要插入的表(提到的东西): 在引用的
id字段
UNIQUE INDEX上 自动递增

egg*_*yal 6

(升级到答案)

看起来像这个bug,差不多五年后仍然开放; 试着改为:

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++;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)