我有一个简单的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];
回显似乎是返回记录的ID值,而不是查询返回的记录数?
对此有何想法或解释?
答案 0 :(得分:17)
您执行了一个从数据库返回行的查询,将结果中的第一行读取到变量中,然后回显该行的第一列。
如果要计数,请执行SQL count()
$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;
答案 1 :(得分:8)
PDO::FETCH_NUM: 返回从结果集中返回的列号索引的数组,从第0列开始
您根本没有获取行数。
SELECT COUNT(*) FROM coursescompleted where person=:p
此查询将返回$rows[0];
修改强>
请看@ ray的答案。对于InnoDB,使用count(id)
优于count(*)
。
您可以按照以前的方式从您之前的查询中获取行计数。
$row_count = $result->rowCount();
但请注意:
如果关联的PDOStatement执行的最后一条SQL语句是 一个SELECT语句,一些数据库可能会返回行数 由该声明返回。但是,不保证这种行为 适用于所有数据库,不应依赖于便携式数据库 应用
答案 2 :(得分:3)
假设id
是主要用途:
SELECT COUNT(id) FROM coursescompleted WHERE person=:p;
避免计数(*)。如果您的存储引擎是InnoDB(可能是除了MyIsam之外的其他产品),您将会受到性能影响。
答案 3 :(得分:1)
尝试echo count($rows);
,因为$rows
是一个数组。
编辑:
使用结果
$rows = $result->fetchAll(/* nothing here */);
if(count($rows) > 0) {
// Show results, perhaps using a foreach($rows as $row)
} else {
echo "Sorry, no results found";
}
答案 4 :(得分:-3)