2012-06-13 2 views
3

Я пытаюсь запустить простой запрос с PDO в PHP. Код очень прост:PDO fetch всегда возвращает false в PHP

try { 

    $sql_query = "select * from Articles where title=':article'"; 
    $dbh = get_PDO_connection(); 
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $stmt = $dbh->prepare($sql_query); 
    $stmt->execute(array(':article' => "MD Example")); 
    var_dump($stmt); 
    $row = $stmt->fetch(); 
    //if($row==null)return 'null'; 
    var_dump($row); 
} catch (PDOException $e) { 
    print $e->getMessage(); 
} 

var_dump($stmt) всегда печатает:

object(PDOStatement)#3 (1) { ["queryString"]=> string(45) "select * from Articles where title=':article'" } 

... независимо от того, что я вкладываю в execute(), без исключений брошенными. И, как указано в заголовке, fetch() всегда возвращает false. Вы должны знать, что если я «жестко запрограммирую» SQL-запрос в строке, все это прекрасно работает. Другими словами, если я установил $sql_query в «select * from Articles, где title = 'MD Example», то fetch() возвращает ожидаемые результаты. Что тут происходит?

ответ

3

Удалите цитаты со всего заполнителем:

$sql_query = "select * from Articles where title=:article"; 
//---------------------------------------------^^^^^^^^^^^ 

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

Оставляя в кавычках, а не использовать заполнитель, PDO будет буквально запрашивая значения :article в title колонке, а не значение, которое вы передаете в execute() массива.

+0

Возможно, самый быстрый ответ, который я получил здесь. Я приму это, как только 10-минутное ожидание закончится. – Hassan

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