获取pdo的行数

时间:2012-11-02 13:13:19

标签: 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];

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

对此有何想法或解释?

5 个答案:

答案 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语句,一些数据库可能会返回行数   由该声明返回。但是,不保证这种行为   适用于所有数据库,不应依赖于便携式数据库   应用

Documentation

答案 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)

您可以使用此

<?php
$result = $db->prepare("select id, course from coursescompleted where person=:p"); 
$result ->bindParam(':p', $q, PDO::PARAM_INT);
$result->execute();
$rows = $result->rowCount();
echo $rows;
?>

这有时对SELECT次查询无效。但是基于个人经验,并且由于您没有提到将其移植到其他数据库系统,它应该适用于MySQL。

更多信息在PHP手册enter image description here