PHP警告:PDOStatement :: execute():SQLSTATE [HY093]:参数号无效:没有绑定参数

时间:2015-12-08 08:28:24

标签: php mysql pdo

我使用PDO来执行sql

"INSERT INTO zhushou_cost_uid
(uid,imei,wmac,imsi,channel,supplier,uuid,brand,device_model,os,os_version,app_version,promotion_method,log_source,takeup_date)
 VALUES
('863207010118070','863207010118070','02037ff459cb','460025323359694','sc-hjcx_ins_cgq','','�ܟ*c�1�]�y�.���#���h���!�o ��z�!Y�~��t8�KOd�xd]���sm����n%$����H����[?�p���M����','KINGSUN','KINGSUN S6','Android','4.1.2','3.2','','1','2015-11-29 03:21:21')", 

PHP代码:

$db = $this->getWritableDB();
$stmt = $db->prepare($sql);
$exec = $stmt->execute();

uuid的数据是脏数据,在我们的日志中是

  

“uuid”:“ *c 1 ” y . # \u0015 h\u001a !\u001c \ u0013o \u0013 z \ u0000! Y〜t8KOdxd] \ u0001sm \ u0016 \ u0001n \ u0013%$ H [\ U0003?PM \ u001a“

我得到了结果

  

SQLSTATE [HY093]:参数号无效:没有绑定参数。

当我尝试将sql复制到终结器时,退出mysql登录状态。我认为uuid有问题。但我无法弄明白。谁能帮我?非常感谢你!

enter image description here

1 个答案:

答案 0 :(得分:4)

$stmt = $db->prepare($sql);

由于您准备您的陈述,如果其中有任何内容可以解释为问号或冒号,则会将其视为占位符,然后您需要传递值适用于execute步骤。由于这实际上不是您想要的,如果您不打算在其中添加占位符,请不要prepare该声明。相反:

$db->exec($sql);

话虽如此,您怀疑是否在$sql中传递了完整格式的SQL查询;也许你应该重写整个事情,这样你在查询中确实有实际的占位符,并将实际值分别传递给execute