Внимательно посмотрите документацию для PDO :: query , особенно раздел «Возвращаемые значения»:
PDO :: query () возвращает PDOStatement объект или FALSE в случае ошибки.
Важным битом является «ЛОЖЬ при ошибке». FALSE не является объектом, поэтому вызов -> fetch () - плохая новость.
Вероятно, ошибка связана с использованием оператора сравнения "==". В SQL это просто «=».
Вы должны проверить, что $ sql_shouts
не является ложным, а затем сделать что-нибудь умное с ошибкой, если она была:
<?PHP
$sql_shouts = $this->db->query('...');
if ($sql_shouts === false){
$errorInfo = $this->db->errorInfo();
//log the error or take some other smart action
}
return $sql_shouts->fetch(PDO::FETCH_OBJ);
Я бы сказал, что ваш запрос не выполняется из-за неправильного синтаксиса. Вам действительно следует проверить статическую функцию PDO errorinfo, чтобы узнать, ошиблись ли запросы или нет.
Вот потенциально правильный оператор SQL:
$sql_shouts = $this->db->query('SELECT shoutid, message, pmuserid, ipadress, `time` FROM shouts WHERE pmuserid = 0');
Я считаю, что время - это зарезервированное слово в MySQL. Я бы рекомендовал использовать другое имя, но заключая его в обратные кавычки, можно решить эту проблему. Для mysql используется 1 знак равенства, а не два. Но да, посмотрите на функцию errorinfo, чтобы определить, не удалось ли выполнить ваш запрос из-за синтаксической ошибки, и аккуратно обработать ее.