使用PDO计算表的行数

时间:2013-02-01 17:31:52

标签: php pdo count

我想知道,使用PDO使用PHP计算表行的最佳方法是什么?

这是我拥有的,但没有为$count获取任何内容。

$count = $con -> query("SELECT COUNT(*) FROM item_descr")->fetch(PDO::FETCH_NUM);
echo $count[0];
if (count($count)>0)
{
$subStatus = "The email introduced is already in our database.";
}

2 个答案:

答案 0 :(得分:2)

没有理由在fetch()返回的数组上使用PHP count()函数。计数已经在SQL中计算,因此您希望结果中存储,而不是结果计数。

以下是我的写作方式:

$countStmt = $con->query("SELECT COUNT(*) FROM item_descr");
if ($countStmt === false) {
  // do something to report the error
}
$count = 0;
while ($row = $countStmt->fetch(PDO::FETCH_NUM)) {
  $count = $row[0];
}
if ($count > 0)
{
  $subStatus = "The email introduced is already in our database.";
}

始终检查query()的返回值是否为有效的PDOStatement。任何错误都会导致它返回false,而标量值false不是具有fetch()方法的对象。 换句话说,您不能以流畅的接口方式($con->query()->fetch())进行调用,因为不能保证query()不返回对象。

答案 1 :(得分:1)

$count = $con->query("SELECT COUNT(*) as `num` FROM `item_descr`")
             ->fetch(PDO::FETCH_ASSOC);

echo $count['num'];

if ( $count['num'] > 0 )
{
  $subStatus = "The email introduced is already in our database.";
}

会奏效。 如果在查询中执行COUNT,则总是只有一个结果,即行数。因此count($ result)将始终为您提供1.在我的示例中,我使用查询中的COUNT。