準備済みステートメントで PDO を使用するときに SELECT 状態で返される行数を取得するための推奨される方法は何ですか?
私は現在rowCount()を使用していますが、「ほとんどのデータベース」ではサポートされていないため、使用すべきではないとドキュメントに書かれています(実際にはうまく機能しているので、使い続けたいと思っています。できます。どのデータベースがそれをサポートしていないかを正確にリストしているソースは見つかりませんが、どうやら私のものは問題ありません)。
代わりに、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. SELECT ステートメントの使用時に rowCount() がサポートするデータベースの公式リストはどこにありますか? また、現在使用しているデータベースで動作しているため、安全に使用できると想定できますか (データベースをすぐに更新しないと仮定して)?