2012-03-23 6 views
1

У меня есть функция, написанная, которая запускает запрос на основе параметров, переданных функции.PHP PDO Параметры из функции возвращенного массива

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

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». Разве они не должны возвращать те же результаты?

Когда эхо значения переменной $ и $ 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.

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

+1

этот код не хватает отладка. И просит незнакомых людей отталкивать его мысленно. Я бы это сделал, но воздержался от этого только ради наличия * PDO-обертки * - вещь, которую почти никогда не видели на этом сайте «энтузиастов-программистов» –

+0

Простите, я подумал, что это достаточно ясно :(Я отредактирую это немного больше. – noko

+1

Почему вы передаете строку запроса в качестве ссылки? – Phil

ответ

0

Я был свидетелем той же проблемы в 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); 
} 

Update:

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

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

PDOStatement PDO::query (string $statement) 

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

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

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

+0

Спасибо за ответ, я тоже пробовал это, и он по-прежнему возвращал разные результаты из теста test(). Хотя, когда я вручную установил значение $ function_returned_array [1] в test2(), он сработал. Есть еще идеи? – noko

+0

держись, я думаю, у меня есть твоя проблема, ты делаешь это неправильно. я обновил свой пост с объяснением. –

+0

Спасибо за ваш ответ, я использую метод prepare() в $ sth = $ this -> _ db-> prepare ($ query). Я все еще рассмотрю все. В моем коде должно быть что-то еще не так! – noko

0

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

Смежные вопросы