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