数组到字符串转换错误?

时间:2014-12-30 01:09:33

标签: php arrays pdo

我正在使用PDO并尝试显示表中有多少用户,但是我收到此错误:

Notice: Array to string conversion in C:\Users\admin.phtml on line 10 Array

然后在我的Admin类中:

 public function CountUsers()
  {
    $query = "SELECT * FROM Users";

    $statement = $this->_dbHandle->prepare($query);

    // Then execute the query
    $statement->execute();

    // This will return the row from the database as an array
    return $statement->fetchAll(PDO::FETCH_ASSOC);
   }

然后在我的管理员控制器中,我有:

$Admin = new Admin();
$CountUsers = $Admin->CountUsers();

要显示结果,我在我的phtml中有这个:

<var><?php echo $CountUsers; ?></var>

有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:1)

您应该尝试计算查询中的用户,例如:

public function CountUsers() {
    $query = "SELECT COUNT(1) FROM Users";

    $statement = $this->_dbHandle->prepare($query);

    if($statement->execute()) {
        // This will return COUNT(1) field
        return $statement->fetch(PDO::FETCH_NUM)[0];
    }else{
        return 0; // should the query fail, return 0
    }
}

如果你想坚持用PHP计算(你不应该这样做),修改你的代码:

return count($statement->fetchAll(PDO::FETCH_ASSOC));

但是你不应该查询所有数据来计算和丢弃它。由于以下几个原因,使用SQL count的性能要高得多:

  • 您无法获取实际数据。如果您的数据集很大,则必须通过套接字传输兆字节或千兆字节。即使数据库在同一台机器上,这也不是太好主意。
  • 您不会将数据存储在PHP中。使用fetchAll时,它会将所有数据存储到PHP数组中,占用内存
  • MySQL引擎可能会使用优化来进一步加快速度(直接查找记录数)

要显示有意义的文字,或使用此功能执行某些操作,您可以:

function CheckUsers() {
    $userCount = CountUsers();
    if($userCount == 0) {
        echo 'No users found';
    }else{
        echo $userCount . ' users found';
    }
}