PDO связывает параметры с массивом - PullRequest
0 голосов
/ 17 марта 2011

Я пытаюсь создать метод в 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 голосов
/ 08 марта 2012

Ваша функция улучшена с передачей foreach $ cValue по ссылке & $ 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();
0 голосов
/ 17 марта 2011

Вам не нужно этого делать. Метод execute уже принимает массив параметров:

function executeQuery($query, $critArr = null) {
    $rows = array();
        try {
            $stmt=$this->pdo->prepare($query);
            $stmt->execute($critArr);
            // ...

Исходная проблема заключается в том, что bindParam работает по ссылке, а foreach просто многократно использует одни и те же переменные, а не уничтожает их в нижней части цикла и (повторно) создает их в вершина. Вы эффективно повторно связывали одну и ту же переменную снова и снова. (Между прочим, это та же проблема, что и у расширения mysqli, хотя в нем также отсутствует удобный метод execute "уже принимает массив".)

...