我刚刚开始使用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);
这是我收到错误的时候,有什么想法吗?
答案 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;
}