将 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() 支持哪些数据库的官方列表?而且由于它正在我当前使用的数据库上工作,我可以假设它可以安全使用(假设我不会很快更新我的数据库)吗?