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