Почему этот сценарий запроса возвращает фатальную ошибку?

Я получаю фатальную ошибку при выполнении запроса ниже:

$stmt = $db->query('SELECT * FROM comments LIMIT 50');
    while ($result = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo $result['name'] . ':' . strip_tags($result['message']);
    }

Возвращает:

  Fatal error: Call to a member function query() on a non-object

Я установил свой $db следующим образом:

try {$db = new PDO('mysql:host=localhost;dbname=database', 'username', 'password');}
catch(PDOException $e) {echo $e->getMessage();}

Кто-нибудь знает, что вызывает эту ошибку?


person Bastiaan ten Klooster    schedule 21.11.2012    source источник
comment
Вы забыли инициализировать $db?   -  person Michael Dunlap    schedule 22.11.2012
comment
Как вы устанавливаете $db?   -  person Dogbert    schedule 22.11.2012


Ответы (2)


Вы не получаете ошибку из-за выполнения запроса. На самом деле запрос никогда не будет пытаться выполнить

Эта ошибка -

Fatal error: Call to a member function query() on a non-object

говорит вам, что $db не является объектом.

Либо он никогда не создавался, либо был создан в другой области.

person Mike Brant    schedule 21.11.2012
comment
Действительно, я случайно поместил $db в оператор if, который будет выполняться только по почтовому запросу. Исправил, спасибо! - person Bastiaan ten Klooster; 22.11.2012

$db не был должным образом инициализирован в той области, в которой вы его используете.

Вы можете попробовать поставить global $db; перед ними обоими, чтобы увидеть, не является ли это проблемой области действия.

global $db;
try {$db = new PDO('mysql:host=localhost;dbname=database', 'username', 'password');}
catch(PDOException $e) {echo $e->getMessage();}

global $db;
$stmt = $db->query('SELECT * FROM comments LIMIT 50');
    while ($result = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo $result['name'] . ':' . strip_tags($result['message']);
    }
person Jordan Mack    schedule 21.11.2012