php - 如何在函数内使用 PDO 计算特定行数?

标签 php mysql pdo

我看到了有关计算行数的其他教程,但没有看到有关计算特定行 $row[scope] 以获得特定结果的教程。如何做到这一点?

function counting(){
$query = "SELECT    * 
          FROM      table";

$result->fetchAll($sql, $params);   
$num_rows = count($result);

$counter = 0;

    //while($row = mysql_fetch_array($result)){ //old code
    foreach($result as $row){
        if($row[scope] == "all"){
            $counter++;
        }
    }
    $return = ($counter > 0)?TRUE:FALSE;
}

protected function fetchAll($sql, $params)
{
    $stmt = $this->dbh->prepare($sql);
    $stmt->execute($params);
    return $stmt->fetchALL(DatabaseAdapter::FETCH_ASSOC);
}

最佳答案

为此您需要两个函数。

您只需要一个通用函数来运行返回PDOStatement的查询,而不是fetchAll(),这是必不可少的。

protected function sql($sql, $params)
{
    $stmt = $this->dbh->prepare($sql);
    $stmt->execute($params);
    return $stmt;
}

在大多数情况下,它的工作方式与 fetchAll() 函数完全相同无需对代码进行任何更改,但如果您明确需要从中获取数组,您可以随时附加对其调用的 fetchAll() :

$result = $this->sql($sql, $params)->fetchAll();

您需要的第二个函数是实际计数:

function counting($value)
{
    $query = "SELECT count(*) FROM table WHERE scope = ?";
    return $this->sql($sql, [$value])->fetchColumn();
}

使用这样的函数,您可以对任何范围进行计数(或检测是否存在)。

请注意,由于返回的 PDOStatement,我们能够获得另一种类型的结果 - 标量值而不是数组。

upgrading While loops can be a pain sometimes....

你看,当 SQL 和 PDO 正确使用时,你几乎不需要 while 循环

关于php - 如何在函数内使用 PDO 计算特定行数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39399729/

相关文章:

php - MySQL PDO 连接,如何检索插入的 ID?

php - Macports 不会安装

php - 购物车商品价格计算,基于 Woocommerce 中选择的 "days"自定义字段

php - 如何使用 php 从表中选择值使用一些键

java - 使用 MyBatis 和 MySql 以编程方式创建表

php - PDO 查询未更新

php - 只需要更新 php 复选框中选中的值

php - Phinx迁移SQLSTATE[42S01] : Base table or view already exists:

php - Mysql多选排除行

mysql - 如何获得行排名?