PHP PDO返回列的假计数

PHP PDO返回列的假计数

问题描述:

所以我想要做的是,我想返回where子句中的列数。目前,这是工作:PHP PDO返回列的假计数

$total = $pdo->query(' 
    SELECT 
     COUNT(*) 
    FROM 
     _TABLENAME_ 
')->fetchColumn(); 

echo $total .' Rows Found'; 
// Outputs 10 if, 10 rows are found. 

但是当我尝试用WHERE LIKE事业来做它,它不会工作。

$gr = '%'.$_GET['genres'].'%'; 
$total = $pdo->query(' 
    SELECT 
     COUNT(*) 
    FROM 
     _TABLENAME_ 
    WHERE 
     genres 
    LIKE 
     '.$gr.' 
')->fetchColumn(); 

echo $total . ' Rows Found'; 
// Outputs 1, even if more are found 

但很明显,这是行不通的,如果这不是你如何做一个PDO执行语句,所以我试图做到这一点:

$gr = '%'.$_GET['genres'].'%'; 
$sql = 'SELECT COUNT(*) FROM `_TABLENAME_` WHERE genres LIKE :gr '; 
$stmt = $pdo->prepare($sql); 
$stmt->bindParam(':gr', $gr, PDO::PARAM_STR); 
$stmt->execute(); 
$total = $stmt->rowCount(); 

echo $total . ' Rows Found'; 

但再一次,结果只有1

+0

你的数据库数据是什么样的? – showdev

+2

SELECT COUNT将只返回一行,包含计数值的单个“列”条目;你需要得到返回的列值,而不是行数 –

+0

@showdev类型喜欢:动作/冒险/喜剧 – Kymetica

由于PHP手册说:

对于大多数数据库,PDOStatement对象:: rowCount时()不返回 数r的行受SELECT语句影响。

相反

使用PDO ::查询()发出SELECT COUNT(*)语句具有相同 谓词如您预期的SELECT语句,然后使用 PDOStatement对象:: fetchColumn()来检索将返回 的行数。然后您的应用程序可以执行正确的操作。

看看这里:Counting rows returned by a SELECT statement。 在PHP手册中,你可以学到更多的使用案例:)

我希望这可以帮助你理解行为。