2012-07-23 154 views
0

我有一個MySQL表格,我在其中存儲一系列應用程序圖標(各種分辨率)作爲blob字段 - 每個表格行標識一個應用程序和六個圖標圖像。我的SQL語句是這樣的在PDO中重複條目上更新blob

INSERT INTO `appicons` (apid,apd16,apd57,apd72,apd114,apd128,apd144) 
    VALUES (:a,:b,:c,:d,:e,:f,:g); 

這工作得很好。但鑑於每個appid都是獨一無二的,我需要考慮是否需要更新應用程序圖標。所以我試了

INSERT INTO `appicons` (apid,apd16,apd57,apd72,apd114,apd128,apd144) 
    VALUES (:a,:b,:c,:d,:e,:f,:g) ON DUPLICATE KEY UPDATE apd16 = :bb; 

不用說在每種情況下綁定適當的參數。但是,更新不會將預期的Blob數據添加到表中。相反,我在該blob字段中獲得1個字節的條目。

我如何做更新blob條目,因爲我需要在這裏做?

+1

請向我們展示您的PDO代碼。 – 2012-07-23 13:28:41

+0

「插入到'appicons'(apid,apd16,apd57,apd72,apd114,apd128,apd144)VALUES(:a,:b,:c,:d,:e,:f,:g)ON DUPLICATE KEY UPDATE apd16 =:bb「; $ stmt = $ dbh-> prepare($ sql); $ stmt-> bindParam(':a',$ sid); $ stmt-> bindParam(':b',$ imd ['16'],PDO :: PARAM_LOB); $ stmt-> bindParam(':bb',$ imd ['16'],PDO :: PARAM_LOB); $ stmt-> bindParam(':c',$ imd ['57'],PDO :: PARAM_LOB); $ stmt-> bindParam(':d',$ imd ['72'],PDO :: PARAM_LOB); $ stmt-> bindParam(':e',$ imd ['114'],PDO :: PARAM_LOB); $ stmt-> bindParam(':f',$ imd ['128'],PDO :: PARAM_LOB); $ stmt-> bindParam(':g',$ imd ['144'],PDO :: PARAM_LOB); – DroidOS 2012-07-23 13:33:24

+0

在帖子裏,不是在這裏,我該怎麼讀? – 2012-07-23 13:34:04

回答

-1

簡單的答案是這樣的 - 當綁定參數到準備好的語句時,他們必須綁定IN ORDER - 即使使用命名參數而不是?佔位符。我一直以錯誤的順序綁定更新位的參數。

+0

不,不需要。當你使用:?佔位符顯然必須是有序的,當它們被命名時它們沒有。如果訂單不重要,那麼指定佔位符就不會有任何意義。 – 2012-07-23 14:13:24

+0

也許你是對的,或許它取決於PHP PDO的使用風格?在任何情況下,通過這種更改,重複的blob更新對我來說都是正確的。 – DroidOS 2012-07-23 14:20:07

+0

如果這本身真的解決了這個問題,那麼這是一個你應該提交的錯誤。如果您使用PDO :: PARAM_STR而不是PDO :: PARAM_LOB,會發生同樣的事情嗎? – 2012-07-23 14:21:34