2012-09-12 68 views
2

我有一個簡單的查詢,我試圖轉換爲插入...重複鍵等,我遵循mysql指南,但由於某種原因,它不更新我的文字。但它確實成功地創建了新的行。任何幫助將不勝感激。查詢的目的是添加和更新少量文本。MySQL插入到重複鍵查詢沒有更新

$sql = "INSERT INTO fetss.ocs_extended(ocsID, internalNOTE) 
      VALUES('" .(int)$_POST['id'] ."', '". $db- >quote($_POST['note_desc']) ."') 
      ON DUPLICATE KEY UPDATE internalNOTE = VALUES('". $db->quote($_POST['note_desc']) ."')"; 

要多liitle有點簡單:

$sql = "INSERT INTO database.tablename(ID, Description) 
VALUES(ID, Description) on Duplicate Key Update Description = VALUES(Description)" 
+0

是您的ID設置爲唯一指標? – Bill

回答

0

嘗試:

$sql = sprintf("INSERT INTO fetss.ocs_extended(`ocsID`, `internalNOTE`) 
       VALUES(%d, '%s') 
       ON DUPLICATE KEY UPDATE 
       `internalNOTE` = VALUES(`internalNOTE`)", 
       (int)$_POST['id'], 
       $db->quote($_POST['note_desc'])); 

我以前sprintf使SQL有點更容易閱讀,但由於要更新使用查詢中的值描述,您不必指定值,只需通過指定該列名稱告訴它使用插入語句中的值即可。

如果你想將其更新爲一些任意字符串,你可以這樣做:

INSERT INTO foo (id, desc) VALUES(1, 'testing') 
ON DUPLICATE KEY UPDATE 
desc = 'some other string that is not testing'; 

不同的是,你不使用VALUES功能這就是你的初始查詢的問題了。

+0

感謝您的快速回復!當我運行這個查詢雖然並更新我的文本字段,它實際上是一個新的行。所以我不知道那裏發生了什麼 – bubbles

+0

'ocsID'是'PRIMARY KEY'嗎?如果不是,它必須是'UNIQUE'索引。 – drew010

+0

我的表中有3個主鍵,並且ocsID是其中的一個 – bubbles

0

使用REPLACE而不是INSERT

當您使用替換,如果已經存在一個重複的鍵行,MySQL的給定值將取代舊行值

+0

隨着REPLACE,它首先刪除行。你會得到一個新的自動ID等 –

+0

一個新的自動ID?我在11年裏做了很多次,從未給我一個新的自動識別碼。如果沒有,是一個新的行!不要替換!是的文檔說DELETES並插入一行與REPLACE語句中給出的數據,但沒有提及有關自動增量列的新ID http://dev.mysql.com/doc/refman/5.0/en/replace。 html –

+0

我正在約會自己。這是在2005年修復:) http://bugs.mysql.com/bug.php?id=10795 –