PDO使用数组绑定参数

时间:2011-03-17 12:51:12

标签: pdo dynamic

我正在尝试在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();

2 个答案:

答案 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();