【问题标题】:Array to string conversion error?数组到字符串转换错误?
【发布时间】:2015-02-26 04:44:30
【问题描述】:

我正在使用 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>

有人明白我做错了什么吗?

【问题讨论】:

  • 您正在尝试输出 PDO 语句的结果。如果是数组,你可以试试echo count($CountUsers);
  • fetchAll() 返回一个数组。你将该数组存储到$CountUsers,所以你不能直接echo它。访问 echo $CountUsers['somekey']count($CountUsers) 之类的元素
  • 无论如何,您正在获取数据库中的所有行只是为了计算它们,这是非常低效的。 Sql 知道 COUNT() 之类的东西

标签: php arrays pdo


【解决方案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';
    }
}

【讨论】:

  • 你看,根据返回的内容,如果你理解的话,我想在同一个函数中执行另一个 SQL 语句?因此,如果返回的用户数为 0,则回显“无用户”,但是如果返回的用户数超过 0,则执行另一条语句
  • @KovachSullivan 好的,我现在明白了。我在答案中添加了一些示例代码(只需在else 部分进行查询)
猜你喜欢
  • 2012-07-15
  • 2017-12-02
  • 2013-06-23
  • 2013-08-24
  • 1970-01-01
  • 1970-01-01
  • 2019-05-01
  • 2016-09-07
相关资源
最近更新 更多