Php 如何使用函数中的PDO计算特定行数?

Php 如何使用函数中的PDO计算特定行数?,php,mysql,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($r

我看到了其他关于行计数的教程,但没有关于特定行计数的教程$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);
}

你需要两个函数

您不需要fetchAll,只需要一个通用函数来运行返回PDO语句的查询,这是必不可少的

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();
}
使用这样的函数,您可以计算或检测任何范围的存在

注意,由于返回了PDO语句,我们能够得到另一种类型的结果——标量值而不是数组

升级While循环有时会很痛苦


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

嘿,为什么不使用SQL语言来为你做这件事呢?在这种情况下,这是非常适合这项工作的工具。e、 g从表中选择*,其中scope='all';-在这一点上,你将不需要PHP来过滤它。这只是函数中大约5行不同的长公式的一部分,尽管我把它简化了,所以我想知道一些基本知识。基本知识是让sql更快100倍。例如,选择count*作为myTable中的count,scope='all'无法使用foreach进行计数?当然,如果您想将系统拖到停止状态而不学习sql:pSo,则必须对数据库进行两次访问。这有助于澄清这一点。当其他用户看到此内容时,请修复fethColumn:抱歉,为什么要两次?抱歉,我用这个逻辑来计算另一个函数中的计数函数,我没有把它添加到问题本身中。你的逻辑是正确的!