PDOStatement::rowCount
直近の SQL ステートメントによって作用した行数を返す
説明
public int PDOStatement::rowCount()
SELECT
文のような、結果セットを生成するSQLステートメントについては動作が未定義です。
動作はドライバによって異なる可能性があります。
データベース(例: MySQL のバッファリングモード)によっては、文によって返された行数を返すかもしれません。しかしながら、
この振る舞いは全てのデータベースで保証されていません。
さまざまな場所で使用するアプリケーションでは、
これに頼ってはいけません。
注意:
このメソッドは SQLite ドライバの場合はあらゆる場合に "0" (ゼロ) を返します。
PostgreSQL ドライバの場合は
ステートメント属性 PDO::ATTR_CURSOR
の設定が PDO::CURSOR_SCROLL
の場合にだけ
"0" (ゼロ) を返します。
エラー / 例外
PDO::ATTR_ERRMODE
が PDO::ERRMODE_WARNING
に設定されていた場合、E_WARNING
レベルのエラーが発生します。
PDO::ATTR_ERRMODE
が PDO::ERRMODE_EXCEPTION
に設定されていた場合、PDOException がスローされます。
例
例1 削除された行数を返す
PDOStatement::rowCount は
DELETE, INSERT, UPDATE 文によって作用した行数を返します。
<?php
/* FRUIT テーブルから全ての行を削除する */
$del = $dbh->prepare('DELETE FROM fruit');
$del->execute();
/* 削除された行数を返す */
print "Return number of rows that were deleted:\n";
$count = $del->rowCount();
print "Deleted $count rows.\n";
?>
Return number of rows that were deleted:
Deleted 9 rows.
例2 SELECT 文によって返された行をカウントする
ほとんどのデータベースでは、 PDOStatement::rowCount
は SELECT 文によって作用した行数を返しません。代わりに、
PDO::query を使って
意図する SELECT 文として同様の述部を持つ SELECT COUNT(*)
文を発行し、 PDOStatement::fetchColumn
を使って返される行数を取得することができます。
<?php
$sql = "SELECT COUNT(*) FROM fruit WHERE calories > 100";
$res = $conn->query($sql);
$count = $res->fetchColumn();
print "There are " . $count . " matching records.";
There are 2 matching records.
参考
- PDOStatement::columnCount
- PDOStatement::fetchColumn
- PDO::query