データベースにテーブルがあります。私のテーブルには、主キーとして設定された自動インクリメントIDフィールドと、一意として設定した「参照」と呼ばれるもう1つのフィールドを含むいくつかのフィールドがあります。そのテーブルにデータを入力するために、pdoを使用してそのテーブルにレコードを挿入するphpスクリプトがあります。挿入が正常に行われるたびに(つまり、「参照」がテーブルに存在しなかった場合)、$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++;
}
}
}
私が得ている致命的なエラー(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フィールド
UNIQUEINDEX で自動インクリメント