簡體   English   中英

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

[英]PHP MYSQL PDO -> Fatal Error 23000 eventhough a special procedure is in place

我的數據庫中有一張表。 我的表有幾個字段,包括一個自動遞增的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++;
    }
  }
}

我得到的致命錯誤(注意第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字段上自動遞增
UNIQUE INDEX參考

升級到答案

看起來像這個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++;
    }
  }
}

堆棧跟蹤顯示fetch中發生的異常,該異常位於try / catch塊之外。

SELECT語句正在觸發:

Integrity constraint violation: 1062 Duplicate entry 'theFieldContentOfTheLastRecordOfTheTable'

有一個名為theFieldContentOfTheLastRecordOfTheTable的唯一鍵,它與之相沖突。

您可以為我們發布架構,看看這會如何影響完整性?

在該列中查找臟/重復數據ALREADY。 某些應用程序允許在已捕獲數據后應用“松散”約束。 這可能發生在你的情況下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM