1

準備済みステートメントで 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() がサポートするデータベースの公式リストはどこにありますか? また、現在使用しているデータベースで動作しているため、安全に使用できると想定できますか (データベースをすぐに更新しないと仮定して)?

4

1 に答える 1

0

使用したくない場合は、2 つのクエリを使用するか、 andをrowCount使用する必要があると思いますfetchAllcount(fetchAll)rowCount

2番目の方法、使用SELECT *,COUNT(*) ...

于 2013-07-27T12:02:59.483 に答える