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

对非对象上的成员函数rowCount()的PHP PDO CRUD类调用,php,pdo,Php,Pdo,我刚刚开始使用PDO离开mysqli,但遇到了一个问题。我正在学习教程,希望从数据库返回数组,但出现以下错误: 致命错误:对第27行C:\xampp\htdocs\phptuts\crud\core\managedb.class.php中的非对象调用成员函数rowCount() 下面是我的managedb.php类: <?php class ManageDatabase { public $link; function __construct() {

我刚刚开始使用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;
}

}

$rowCount=$query->rowCount()之前,我将
变量转储($query)
行来查看它实际上是什么,因为它显然不是一个对象。我猜它不是空的就是空的,因为整个
$this link->query()没有返回您期望的内容

有几件事需要检查:

从:

PDO::query()返回PDOStatement对象,失败时返回FALSE

您需要测试查询是否成功,如果不成功,原因是什么。您可以使用PDO的函数检查错误:

if($query==false)
{
打印($this->link->errorInfo());
退出();
}
另外需要注意的是,PDO中的
rowCount()
从INSERT/UPDATE/DELETE type语句返回受影响的行。对于SELECT,可以获得行计数,也可以不获得行计数。手册建议使用单独的查询来查找行数,但在您的实例中,如果您从fetchAll()返回任何内容,则测试可能会更容易:

$result=$query->fetchAll();
如果(!空($result))
{
返回$result;
} 
其他的
{
返回0;
}

如果传递参数,则应使用准备好的查询
$id
Ok我将SQL直接放入phpmyadmin并获得预期结果,但在脚本中直接执行var_dump时返回bool(false),因此我猜我的$rowCount函数出了问题,我无法确定是什么。嗨,Rick,感谢您让我走上了正确的轨道,我在执行转储时得到了这个消息:bool(false)If$query是bool(false),这意味着查询字符串不知何故是不正确的。您还应该var_dump查询字符串并确保其正确,还应该var_dump$this->link以确保其正确。
<?php

include_once('../core/managedb.class.php');
$init = new ManageDatabase;

$table_name = 'users';
$data = $init->getData($table_name);

print_r($data);