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