Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 数组到字符串转换错误?_Php_Arrays_Pdo - Fatal编程技术网

Php 数组到字符串转换错误?

Php 数组到字符串转换错误?,php,arrays,pdo,Php,Arrays,Pdo,我正在使用PDO并试图显示一个表中有多少用户,但出现以下错误: Notice: Array to string conversion in C:\Users\admin.phtml on line 10 Array 然后在我的管理课上: public function CountUsers() { $query = "SELECT * FROM Users"; $statement = $this->_dbHandle->prepare($query);

我正在使用PDO并试图显示一个表中有多少用户,但出现以下错误:

Notice: Array to string conversion in C:\Users\admin.phtml on line 10 Array
然后在我的管理课上:

 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>


有人知道我做错了什么吗

您应该尝试统计查询中的用户,如下所示:

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';
    }
}

您正在尝试输出PDO语句的结果。如果它是一个数组,您可以尝试
echoccount($CountUsers)
而是
fetchAll()
返回一个数组。您将该数组存储到
$CountUsers
中,因此无法
直接回送它。访问元素,如
echo$CountUsers['somekey']
count($CountUsers)
无论如何,您获取数据库中的所有行只是为了对它们进行计数,这是非常不理想的。Sql知道类似于
COUNT()
的东西,你看,根据返回的内容,如果你明白的话,我想在同一个函数中执行另一个Sql语句?因此,如果0个用户返回echo“no users”,但是如果返回的用户超过0个,则执行另一个statement@KovachSullivan好了,我现在明白了。我在答案中添加了一些示例代码(只需在
else
部分中进行查询)