我想将PDO查询参数作为数组传递给我的execute()方法,而不是使用PDO的bindParams。我这样做,所以我可以创建一个函数来动态执行具有不同数量参数的类似查询。
bindParam()路由产生预期结果:
$stmt->bindParam(":user_id",$user_id,PDO::PARAM_INT);
$stmt->bindParam(":n",$n,PDO::PARAM_INT);
$stmt->execute();
但是这个方法返回一个没有抛出错误的空集:
$params = array(":user_id"=>$user_id,":n"=>$n);
$stmt->execute($params);
有人可以向我解释这两种方法之间的区别是什么,以及导致我的问题的原因是什么?我看到的唯一区别是,当我将$ params作为参数传递给.execute时,我没有机会指定类型(POD :: PARAM_INT)。如果这是问题,是否有解决方法?
答案 0 :(得分:0)
我发现此查询失败,因为我试图将参数分配给LIMIT子句值。将参数传递给execute函数时,PDO将所有参数包装在引号中,LIMIT子句无法处理引用的参数。
解决方案(直到我找到更好的东西,我仍然希望)是查询上的旧式字符串连接,以在添加其余参数之前生成完整的LIMIT子句。