2012-07-23 160 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