Php 数组到字符串转换错误?
我正在使用PDO并试图显示一个表中有多少用户,但出现以下错误: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);
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中。使用
时,它会将所有数据存储到PHP数组中,占用内存fetchAll
- 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
部分中进行查询)