Php PDO执行($params)与bindParam

Php PDO执行($params)与bindParam,php,mysql,pdo,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(); 但此方法返回一个空集,并且不会抛出错误: $

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

我发现此查询失败,因为我试图将参数分配给LIMIT子句值。当将参数传递给execute函数时,PDO将所有参数都用引号括起来,而LIMIT子句不能处理带引号的参数


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

这不是一个重复的问题。那个问题问使用哪一个,我的问题是如何正确使用execute。在将问题标记为重复问题之前,请仔细阅读。您的问题是一个典型的问题,如果您询问绑定限制变量,我同意@davidstrachan,您会找到很多答案。我试图说得具体一些,但在提出将值绑定到限制的问题时,我没有意识到这与我的问题有任何关系。这个问题似乎离题了,因为它原来是在注释(即限制条款)中探讨的xy问题。我不同意。如果使用bindParam并指定PDO::PARAM_INT,PDO可以通过LIMIT子句传递整数参数,但据我所知,目前无法通过execute来传递。这个问题本身完全是一个话题。