PDO执行($ params)vs bindParam

时间:2014-02-10 09:57:43

标签: php mysql pdo

我想将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)。如果这是问题,是否有解决方法?

1 个答案:

答案 0 :(得分:0)

我发现此查询失败,因为我试图将参数分配给LIMIT子句值。将参数传递给execute函数时,PDO将所有参数包装在引号中,LIMIT子句无法处理引用的参数。

解决方案(直到我找到更好的东西,我仍然希望)是查询上的旧式字符串连接,以在添加其余参数之前生成完整的LIMIT子句。