2014-02-10 91 views
1

我想将我的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

这不是一个重复的问题。那个问题问哪一个使用,我的问题是如何正确使用execute。在将问题标为重复之前,请仔细阅读。 – nathan

+2

你的问题是一个典型的[** xy问题**](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)如果你问过绑定LIMIT变量,你会有发现很多答案[** ie **](http://stackoverflow.com/questions/2269840/php-pdo-bindvalue-in-limit) –

+0

@davidstrachan,我同意。我尽量具体,但在提出问题时,我没有意识到LIMIT的价值与我的问题有任何关系。 – nathan

回答

0

我发现这个查询失败了,因为我试图给一个LIMIT子句赋值一个参数。将参数传递给execute函数时,PDO将所有参数包含在引号中,而LIMIT子句不能处理带引号的参数。

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