php - PDO:调用非对象上的成员函数 fetch()?

标签 php pdo

<分区>

我正在尝试 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);

    }

}

最佳答案

仔细查看 PDO::query 的文档,特别是“返回值”部分:

PDO::query() returns a PDOStatement object, or FALSE on failure.

重要的一点是“失败时为 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);

关于php - PDO:调用非对象上的成员函数 fetch()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3349612/

相关文章:

PHP Define() 和 PDO 连接字符串问题

php - MySQL 查询结果有限

php - <a> 标签中带有 PHP vars onclick 的 JS 函数不起作用

php - 如何使用 Zend 框架读取 Excel 文件?

php - Laravel Blade 模板中的这一行是否安全,不会受到 XSS 的影响

php - 将表单中的数据输入数据库 PDO

php - 使用 PDO 选择多个数据库

Php动态菜单栏代码错误

php - 如何在 Swift Mailer 中扩展 MailboxHeader.php 或验证电子邮件

php - 检查空结果(PHP、PDO 和 MySQL)