[英]MYSQL inserting multiple rows unexpectedly
我有一個問題,並希望有人可以幫助我。
我的問題是每當我在“MainFile”中運行代碼時,它會輸出它添加了條目的兩個ID,但是當我查看我的數據庫時,我有六個條目而不是兩個...有人可以告訴我為什么它可能會這樣做?
注意:我只提供了類中代碼的片段,因為提供完整的類將是太多的代碼。 這是唯一可以執行的代碼。
編輯史上的代碼
編輯:我已經在這篇文章的底部添加了一個調試日志,驗證我只為每個查詢執行一次SQL代碼。
編輯:我不再使用序列化方法,因為存儲此類數據顯然不是一個好主意。 但是,即使我的新代碼將每個單獨的值存儲在數據庫中,我仍然會得到三個條目而不是一個條目。 所以,這是同一個問題。 什么?
編輯:經過幾天的調試后,我已將其縮小到導致問題的這一行
Throwlite::$systemSQL->executeSql("INSERT into ".SQL_COMMENTTHREADS_TABLE." (id, sort_order) values (DEFAULT, '2')");
您可以在此處查看LiteSQL類以供參考: http ://pastebin.com/a4C6fF4u
另外,作為參考,以下是用於創建表的代碼:
"CREATE TABLE IF NOT EXISTS `" . SQL_COMMENTTHREADS_TABLE . "` (`id` int unsigned NOT NULL AUTO_INCREMENT, `sort_order` int NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;"
而且,即使我非常確定它應該沒關系,這里是定義SQL_COMMENTTHREADS_TABLE的地方。
define( 'SQL_COMMENTTHREADS_TABLE', "tl_comment_threads");
我不確定這會回答您的問題,但您似乎在指定要插入的ID
。 我不確定你是不是在你的id列上使用了PRIMARY KEY
,或者為什么這根本不起作用,但也許你想要這個:
INSERT INTO " . SQL_COMMENTS_TABLE . " (id, thread) VALUES (DEFAULT, ?)
更新UPDATE tl_comments SET thread=? WHERE id = ?
UPDATE tl_comments SET thread=? WHERE id = ?
和第二個? 如果沒有替換為有效的現有ID,而是保持為空,則數據庫找不到要更新的條目,而是插入新行。 因此,創建另一個條目將導致您每次查詢時生成2行而不是一行。
這意味着GetLastInsertID()
函數無法正常工作。 這可能是由一些事情引起的,但是在stackoverflow上已經有很多有用的提示來解決這個問題。
我找不到您提供的代碼段中的任何邏輯問題。 但是,您可以進行以下更改並在此處發布輸出:
這個DB訪問類的編寫方式很明顯,“prepared_statements”數組的單個索引中不存在兩個插入查詢。 還是最好檢查並確認。 此外,如果您可以共享該功能(在其下運行插入查詢代碼段),並且調用此函數的代碼片段對其他人來說可能對調試問題很有用。
我覺得你的代碼中的某個地方正在運行一個循環,導致它在數據庫中多次插入。 您可以嘗試回顯查詢,以便了解查詢運行的次數。
另一個hack可以放置條件來檢查行是否已經存在 - 不插入。
你可以發布你的代碼,以便我可以調試它。
順便說一句,你錯過了你發布的pastebin第51行的第二個}
。 if(sizeof($binds) > 0){
未關閉。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.