2009-12-21 66 views
1

我有一個PHP foreach循環和一個mysql插入語句裏面。循環將數據插入到我的數據庫中。我從來沒有遇到過這個問題,但我認爲發生的事情是插入死亡(我插入後沒有「死亡」聲明),當它到達重複記錄。即使表格中可能有重複記錄,我仍然需要繼續。有什麼我需要指定要做到這一點?mysql繼續出錯

我將一些記錄從一個表格轉移到另一個表格。現在,我在表#1中有20條記錄,而在表#2中只有17條記錄。我缺少3條記錄,但其中只有一條是重複的,違反了表上的約束條件。其他兩個記錄應該已經添加。有人能給我一些建議嗎?

+0

請問您是否迴應查詢並將它們發佈在此處?我懷疑查詢有問題。 – 2009-12-21 12:29:32

+0

您需要添加更多信息,例如兩個表的關鍵結構以及複製行的查詢。我同意下面的答案,你需要弄清楚爲什麼插入失敗......一種方法是繞過你已知的問題記錄(crufty),這樣你就可以看到其他人失敗的原因。 – r00fus 2009-12-21 21:09:21

回答

0

不會引起你的好辦法應該弄清楚什麼是錯的,但只是阻止它dieing嘗試在功能解決此

@mysql_query = ... 
+0

我已經試過,但它不起作用。 :( – john 2009-12-21 11:04:48

0

一種方法前添加@是簡單地查詢數據庫您即將插入的記錄。這樣,當您嘗試插入重複記錄時,您的一系列查詢不會死亡。

一個稍微有效的解決方案是查詢[i]您要在一個查詢中插入的記錄的所有[/ i],刪除所有重複項,然後插入新記錄。

0

您是否用一條INSERT語句插入多行?

INSERT INTO xyz (x,y,z) VALUES 
    (1,2,3), 
    (2,3,5), 
    (3,4,5), 
    (4,5,6) 

那麼你可能要考慮prepared statements
...或添加關鍵字無視你的INSERT語句

INSERT IGNORE INTO xyz (x,y,z) VALUES 
    (1,2,3), 
    (2,3,5), 
    (3,4,5), 
    (4,5,6) 

http://dev.mysql.com/doc/refman/5.0/en/insert.html說:

如果使用忽略關鍵字,錯誤執行INSERT語句時發生的錯誤將被視爲警告

您仍然可以獲取警告,但插入不會中止。

0

INSERT INTO FOO (ID,BAR) VALUES(1,2),(3,4) ON DUPLICATE KEY UPDATE BAR = VALUES(BAR)

1

發生了什麼事是,PHP是扔一個警告當mysql插入失敗並停止該警告。以實現自己的目標,最好的辦法是:

  1. 創建一個自定義異常處理程序
  2. 設置PHP使用異常處理程序的警告。
  3. 將插入嘗試換成try/catch
  4. 當您捕獲異常/警告時,請記錄或輸出mysql錯誤,但繼續執行腳本。

這將允許您的腳本在不停止的情況下繼續,同時向您解釋問題。