PHP MYSQL PDO -> Fatal Error 23000 eventhough a special procedure is place

标签 php mysql pdo

我的数据库中有一张表。我的表有几个字段,包括一个设置为主键的自动递增 id 字段,以及另一个我设置为唯一的名为“reference”的字段。为了填充该表,我有一个 php 脚本,它使用 pdo 在该表中插入记录。每次插入成功(意味着表中不存在“引用”),我都会增加一个名为 $newOnes 的变量。如果表中已存在值“reference”,则会触发代码为 23000 的异常。在这种情况下,我增加了另一个名为 $doublons 的变量。不幸的是,我的脚本触发了异常 23000 的 fatal error 当 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++;
    }
  }
}

我遇到的 fatal error (注意第 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

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

原表(things to mentionne):
自动递增的 id

要插入的表格(要提及的内容):
在 id 字段上自动递增
UNIQUE INDEX 引用

最佳答案

(升级到答案)

看起来像this 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++;
    }
  }
}

关于PHP MYSQL PDO -> Fatal Error 23000 eventhough a special procedure is place,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10430005/

相关文章:

php - 为通过 PHP 建立的 PDO 连接设置 appName

没有foreach循环的bindParam中的php pdo绑定(bind)数组参数

php - 函数中的mysql查询和结果语句

php - MySQL JOIN 语句帮助

php - 用 $test ["index"替换 php4 样式数组 $test[index] 的正则表达式]

mysql - PHPMyAdmin 无法连接到服务器

php - 如何构建自定义 PHP Mysql 或 PDO 函数

php - Laravel Eloquent - pluck() 角色名称

mysql - Asterisk 1.8 数据库和 Digium GUI 同步

php - 更新选择查询?