Используя PDO, действительно ли мне нужно запустить два отдельных подготовленных оператора, чтобы получить количество возвращаемых строк?

Каков предпочтительный метод получения количества строк, возвращаемых для состояния SELECT при использовании PDO с подготовленными операторами?

В настоящее время я использую rowCount (), но документы говорят, что я не должен использовать это, поскольку «большинство баз данных» его не поддерживают (на самом деле это работает отлично для меня, поэтому я испытываю соблазн продолжать использовать его. 't найти какие-либо источники, которые точно перечисляют, какие базы данных не поддерживают его, но, видимо, у меня все в порядке).

Вместо этого они рекомендуют использовать fetchColumn (), но для этого требуется написать полностью отдельный оператор SQL, содержащий COUNT (*) в моей инструкции sql.

Это то, что они предлагают ( 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. Где я могу найти официальный список, какие базы данных rowCount () поддерживает при использовании инструкции SELECT? И поскольку он работает с базой данных, которую я использую в настоящее время, могу ли я предположить, что это безопасно использовать (если я не обновляю свою базу данных в ближайшее время)?

Если вы не хотите использовать rowCount я думаю, вам нужно два запроса, или вы можете использовать fetchAll и count(fetchAll) для rowCount

второй способ, используйте SELECT *,COUNT(*) ...