Параметры PHP PDO из возвращаемого массива функции - PullRequest
1 голос
/ 23 марта 2012

У меня написана функция, которая выполняет запрос на основе параметров, переданных в функцию.

Я не могу понять, почему выполнение следующего возвращает результат:

function test($function_returned_array)
{
    $variable = 'Hello World';
    $sql = 'SELECT `name`, `pid`
            FROM `products`
            WHERE `name` IN (?)';
    $found = $this->db->get_array($sql, $variable);
}

Пока это не возвращает никаких результатов:

function test2($function_returned_array)
{
    $sql = 'SELECT `name`, `pid`
            FROM `products`
            WHERE `name` IN (?)';
    $found = $this->db->get_array($sql, $function_returned_array[0]);
}

$ function_returned_array [0] также равно «Hello World». Разве они не должны давать одинаковые результаты?

Когда я повторяю значения $ variable и $ function_returned_array [0], они оба являются «Hello World»

Вот соответствующие части моей оболочки PDO:

public function query(&$query, $params)
{
    $sth = $this->_db->prepare($query);

    if(is_null($params))
    {
        $sth->execute();
    }
    else if(is_array($params))
    {
        $sth->execute($params);
    }
    else
    {
        $sth->execute(array($params));
    }

    $this->_rows = $sth->rowCount();
    $this->_counter++;
    return $sth;
}

public function get_array(&$query, $params, $style = PDO::FETCH_ASSOC)
{
    $q = $this->query($query, $params);
    return $q->fetchAll($style);
}

Я использую PHP 5.3.5.

Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 25 марта 2012

Просто на голову, проблема была в том, что $ function_returned_array [0] и переменная $ на самом деле не совпадали. $ function_returned_array [0] необходимо было передать через html_entity_decode ().

0 голосов
/ 23 марта 2012

Я был свидетелем той же проблемы в PDO. PDO принимает локальную переменную только для параметризованного запроса, а не по ссылке или аргументу, хотя и не уверен, почему.

Обходной путь для этого может быть.

function test2($function_returned_array)
{
    $variable = $function_returned_array[0];
    $sql = 'SELECT `name`, `pid`
            FROM `products`
            WHERE `name` IN (?)';
    $found = $this->db->get_array($sql, $variable);
}

Обновление:

Вы делаете это неправильно. Вы должны использовать оператор PDO prepare () для параметризованного запроса, тогда как я вижу, что вы используете запрос PDO () непосредственно в вашем методе get_query ().

Вы должны использовать метод query(), только если вы не хотите передавать какие-либо параметры в запрос. В соответствии с документацией php здесь приведен синтаксис

PDOStatement PDO::query ( string $statement )

второй аргумент, который вы пытаетесь передать, неверен.

так что вместо этого используйте prepare() метод, и вот ссылка.

http://in.php.net/manual/en/pdo.prepare.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...