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

时间:2012-06-18 19:31:40

标签: php pdo

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

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

2 个答案:

答案 0 :(得分:1)

我在var_dump($query)行前$rowCount = $query->rowCount();看看它到底是什么,因为显然它不是一个对象。我猜它是NULL或空的,因为整个$this-link->query(<sql statement>);没有返回你的预期

答案 1 :(得分:0)

要检查的几件事情:

来自PHP manual

  

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

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

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

需要注意的另一件事是PDO中的rowCount()从INSERT / UPDATE / DELETE类型语句返回受影响的行。对于SELECT,您可能会获得行数,或者您可能没有。手册建议单独查询以查找行数,但在您的实例中,如果您从fetchAll()获取任何内容可能更容易测试:

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