获取pdo的行数

Smu*_*ger 11 mysql pdo rows

我有一个简单的pdo准备查询:

$result = $db->prepare("select id, course from coursescompleted where person=:p"); 
$result ->bindParam(':p', $q, PDO::PARAM_INT);
$result->execute();
$rows = $result->fetch(PDO::FETCH_NUM);
echo $rows[0];
Run Code Online (Sandbox Code Playgroud)

echo似乎返回记录的ID值,而不是查询返回的记录数?

对此有何想法或解释?

Ste*_*hen 17

你已经执行的从数据库返回行的查询,获取的第一行从结果到一个变量,然后回显该行的第一列.

如果要计数,请执行SQL计数()

$result = $db->prepare("select count(*) from coursescompleted where person=:p"); 
$result->bindParam(':p', $q, PDO::PARAM_INT);
$result->execute();
$rowCount = $result->fetchColumn(0);
echo $rowCount;
Run Code Online (Sandbox Code Playgroud)


Ani*_*han 8

PDO :: FETCH_NUM: 从第0列开始,返回由结果集中返回的列号索引的数组

您根本没有获取行数.

SELECT COUNT(*) FROM coursescompleted where person=:p
Run Code Online (Sandbox Code Playgroud)

此查询将返回总行数 $rows[0];

编辑: 请看@ ray的答案.使用count(id)count(*)InnoDB 更好.


您可以从以前的查询中按以下方式获取行计数.

$row_count = $result->rowCount();
Run Code Online (Sandbox Code Playgroud)

但请注意:

如果关联的PDOStatement执行的最后一个SQL语句是SELECT语句,则某些数据库可能会返回该语句返回的行数.但是,并不保证所有数据库都有这种行为,不应依赖于便携式应用程序.

文档