PDO: вызов функции-члена функции fetch () для не-объекта?

Я просто пытаюсь выполнить PDO, и я получаю эту ошибку. Fatal error: вызов функции-члена функции fetch () для не-объекта, но разве он уже не находится в объекте $ this-> db?

class shoutbox { private $db; function __construct($dbname, $username, $password, $host = "localhost" ) { # db conections try { $this->db = new PDO("mysql:host=".$hostname.";dbname=".$dbname, $username, $password); } catch(PDOException $e) { echo $e->getMessage(); } } function getShouts() { $sql_shouts = $this->db->query('SELECT shoutid, message, pmuserid, ipadress, time FROM shouts WHERE pmuserid == 0'); return $sql_shouts->fetch(PDO::FETCH_OBJ); } } 

Solutions Collecting From Web of "PDO: вызов функции-члена функции fetch () для не-объекта?"

Посмотрите внимательно на документацию для PDO :: query , в частности раздел «Возвращаемые значения»:

PDO :: query () возвращает объект PDOStatement или FALSE при сбое.

Важным битом является «FALSE on failure». 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); 

Я бы сказал, что ваш запрос не выполняется из-за неправильного синтаксиса. Вы действительно должны проверить статическую функцию errorinfo PDO, чтобы увидеть, был ли запрос вычеркнут или нет.

Вот потенциальный правильный оператор SQL:

 $sql_shouts = $this->db->query('SELECT shoutid, message, pmuserid, ipadress, `time` FROM shouts WHERE pmuserid = 0'); 

Я считаю, что время – это зарезервированное слово в MySQL. Я бы рекомендовал использовать другое имя, но включение его в обратные ссылки облегчит эту проблему. 1 знак равенства используется для mysql, а не для двух. Но да, загляните в функцию errorinfo, чтобы определить, завершился ли ваш запрос из-за синтаксической ошибки и обработал ее изящно.

Это происходит, когда таблица также не существует. убедитесь, что он на самом деле существует, и не только является держателем в базе данных из-за ошибок жесткого диска.

Когда это произойдет, я предлагаю вам воссоздать базу данных / таблицу.

Я получил это сообщение об ошибке из-за глупой ошибки с помощью скобок. Он был вложен внутри оператора if и просто не видел его.

 db_query("SELECT thing FROM table WHERE var=:var", array(":var" => $var)->fetchField()); 

Мне потребовалось некоторое время, чтобы понять, что я не закрыл консоль db_query в нужном месте. Может быть, это помогает кому-то еще взглянуть на это удивление wth. Верный:

 db_query("SELECT thing FROM table WHERE var=:var", array(":var" => $var))->fetchField();