这个问题在这里已经有一个答案:>
My PDO Statement doesn’t work1
我只是尝试PDO,我得到这个错误,致命错误:调用一个非对象的成员函数fetch(),但它不是已经在$this-> db对象上?
我只是尝试PDO,我得到这个错误,致命错误:调用一个非对象的成员函数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,$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); } }
仔细阅读
PDO::query的文档,特别是“返回值”部分:
原文链接:https://www.f2er.com/php/131452.htmlPDO::query() returns a PDOStatement
object,or FALSE on failure.
重要的一点是“失败失败”. FALSE不是一个对象,所以调用 – > fetch()是一个坏消息.
错误可能是由于您使用“==”比较运算符.在sql中,它只是“=”.
你应该测试$sql_shouts不是false,然后做一些聪明的错误,如果有一个:
<?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);