PDO возвращает false при получении - PullRequest
1 голос
/ 22 апреля 2011

У меня есть этот метод:

protected function _getByColumn($columnName, $value)                                                                                                                                                                                  
{                                                                                                                                                                                                                                     
        $sql = "SELECT * FROM $this->__tableName                                                                                                                                                                                           
                WHERE :column = :value";                                                                                                                                                                                                   
        $stmt = $this->__db->prepare($sql);                                                                                                                                                                                                
        $stmt->execute(array(':value' => $value, ':column' => $columnName));                                                                                                                                                               
        $val=$stmt->fetch(PDO::FETCH_OBJ);                                                                                                                                                                                                 
        var_dump($val);   //getting boolean false


} 

я что-то не так делаю в способе вызова PDO?у меня были выходные данные $columnName и $value, а также echod $sql, вручную заменены :column и :value, и все работало.предложения?

edit:

string 'SELECT * FROM myTable
               WHERE :column = ':value'' (length=61)

string 'blog_id' (length=9) 

string 'a3sasidsf' (length=8)

все значения соответствуют ожидаемым.

1 Ответ

2 голосов
/ 22 апреля 2011

Вы не можете использовать связанный параметр в качестве идентификатора. Прямо сейчас ваш код говорит $columname = $value, а не желаемый {value of $columname} = $value. Вы не можете связать идентификаторы. Наилучшее решение, если вы хотите взять переменное имя столбца, - это внести в белый список входные данные с известными именами столбцов, а затем заключить их в кавычки. Итак:

if (in_array($columnName, $columns)) {
    $sql .= '`' . $columnName . '` = :value';
} else {
    die('illegal column');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...