我的数据库中有一张表。我的表有几个字段,包括设置为主键的自动递增 id 字段,以及我设置为唯一的另一个名为“引用”的字段。为了填充该表,我有一个 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
编辑 //////////
原始表(需要提及的事情):
自动递增id
要插入的表(要提到的事情):
id 字段自动递增
参考唯一索引
(升级为答案)
好像this bug https://bugs.php.net/bug.php?id=42322,近五年后仍然开放;尝试改为:
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++;
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)