PHP PDO CRUD 类 调用非对象上的成员函数 rowCount()


PHP PDO CRUD class Call to a member function rowCount() on a non-object

我刚刚开始使用PDO远离mysqli,但遇到了一个问题。我正在按照教程进行操作,我想从数据库中返回一个数组,但出现以下错误:

致命错误:在第 27 行的 C:''xampp''htdocs''phptuts''crud''core''managedb.class.php 中的非对象上调用成员函数 rowCount()

这是我的 managedb.php 类:

<?php
class ManageDatabase
{
    public $link;
    function __construct()
    {
        include_once('database.class.php');
        $conn = new database;
        $this->link = $conn->connect();
        return $this->link;
    }
    function getData($table_name, $id=null)
    {
        if(isset($id))
    {
        $query = $this->link->query("SELECT * FROM $table_name WHERE id = '$id' ORDER BY id ASC");
    }
    else
    {
        $query = $this->link->query("SELECT * FROM $table_name ORDER BY id ASC");
    }
    $rowCount = $query->rowCount();
    if($rowCount >= 1)
    {
        $result = $query->fetchAll();
    }
    else
    {
        $result = 0;
    }
    return $result;
}
}

然后,我只是使用以下代码来尝试获取响应:

<?php
include_once('../core/managedb.class.php');
$init = new ManageDatabase;
$table_name = 'users';
$data = $init->getData($table_name);
print_r($data);

这是我收到错误的时候,有什么想法吗?

我会在$rowCount = $query->rowCount();行之前var_dump($query)看看它实际上是什么,因为显然它不是一个对象。 我猜它要么是空的,要么是空的,因为整个$this-link->query(<sql statement>);都没有返回你期望的

有几件事要检查:

从 PHP 手册:

PDO::query() 返回一个 PDOStatement 对象,或在失败时返回 FALSE。

您需要测试查询是否成功,如果没有,则测试原因。您可以使用 PDO 的errorInfo功能检查错误:

if ($query == false) 
{
    print_r($this->link->errorInfo());
    exit();
}

需要注意的另一件事是,PDO中的rowCount()从插入/更新/删除类型语句返回受影响的行。对于 SELECT,您可能会获得行计数,也可能不会。该手册建议使用单独的查询来查找行数,但是在您的实例中,如果您从 fetchAll() 返回任何内容,测试可能会更容易:

$result = $query->fetchAll();
if (!empty($result)) 
{
    return $result;
} 
else 
{
    return 0;
}