1

将 PDO 与预准备语句一起使用时,获取 SELECT 状态返回的行数的首选方法是什么?

我目前正在使用 rowCount() 但文档说我不应该使用它,因为“大多数数据库”不支持它(它实际上对我来说工作得很好,所以我很想继续使用它。我可以'找不到任何来源准确列出哪些数据库不支持它,但显然我的很好)。

相反,他们建议我使用 fetchColumn() 但这需要编写一个完全独立的 SQL 语句,该语句在我的 sql 语句中包含 COUNT(*)。

这就是他们的建议(http://php.net/manual/en/pdostatement.rowcount.php#example-1038):

//SQL TO GET ROWS TO OUTPUT
$sql = 'SELECT *
  FROM properties
  WHERE lister_id = :lister_id
  AND lister_type = "landlord"';

$result = $dbh->prepare($sql);
$result->bindParam(':lister_id', $_SESSION['loggedin_lister_id'], PDO::PARAM_INT);
$result->execute();

//SQL TO GET NUMBER OF RETURNED ROWS
$row_num_sql = 'SELECT COUNT(*)
  FROM properties
  WHERE lister_id = :lister_id
  AND lister_type = "landlord"';

$row_num_result = $dbh->prepare($row_num_sql);
$row_num_result->bindParam(':lister_id', $_SESSION['loggedin_lister_id'], PDO::PARAM_INT);
$row_num_result->execute();
$num_rows = $row_num_result->fetchColumn();

if($num_rows > 0) {
  while($row = $result->fetch(PDO::FETCH_ASSOC)) {
    echo $row['name'];
  }
}

我发现这种方法需要我编写一个单独且几乎相同的 sql 语句,在使用准备好的语句时是多余的和严重的痛苦。我可以理解在使用带有基本查询的简短 SQL 语句时这种方法是如何被接受的,但在准备好的语句的情况下则不然。

1.有没有其他方法可以使用 fetchColumn() 方法而不必重写几乎完全相同的代码?

2.在哪里可以找到使用 SELECT 语句时 rowCount() 支持哪些数据库的官方列表?而且由于它正在我当前使用的数据库上工作,我可以假设它可以安全使用(假设我不会很快更新我的数据库)吗?

4

1 回答 1

0

如果你不想使用rowCount我认为你应该两个查询,或者你可以使用fetchAlland count(fetchAll)forrowCount

第二种方式,使用SELECT *,COUNT(*) ...

于 2013-07-27T12:02:59.483 回答