我正在尝试在PHP中创建一个方法,它将动态绑定参数到PDO查询语句。不幸的是,在我的下面的代码中,我只能绑定1个参数,因为添加更多参数将覆盖以前的参数。不过,有没有一种解决这个问题的好方法?
我希望有人可以提供帮助。谢谢!
function executeQuery($query, $critArr = null) {
$rows = array();
try {
$stmt=$this->pdo->prepare($query);
if (!empty($critArr)) {
foreach($critArr as $cKey=>$cValue) {
$stmt->bindParam($cKey, $cValue); //!!
}
}
$stmt->execute();
答案 0 :(得分:0)
你不需要这样做。 execute
方法已经采用参数数组:
function executeQuery($query, $critArr = null) {
$rows = array();
try {
$stmt=$this->pdo->prepare($query);
$stmt->execute($critArr);
// ...
最初的问题是bindParam
通过引用工作,而foreach
只是反复重复使用相同的变量而不是在循环的底部销毁它们,并且(重新)在顶部创建它们。你实际上是一遍又一遍地重新绑定同一个变量。 (顺便说一句,这与mysqli
扩展名相同,但它也缺少方便的已采用数组execute
方法。)
答案 1 :(得分:0)
通过引用& $ cValue传递foreach $ cValue,您的函数得到了改进。这应该可以解决你的问题。
function executeQuery($query, $critArr = null) {
$rows = array();
try {
$stmt=$this->pdo->prepare($query);
if (!empty($critArr)) {
foreach($critArr as $cKey=>&$cValue) {
$stmt->bindParam($cKey, $cValue); //!!
}
}
$stmt->execute();