PDOStatement::rowCount

直近の SQL ステートメントによって作用した行数を返す

説明

public int PDOStatement::rowCount()

PDOStatement::rowCount は 相当する PDOStatement オブジェクトによって実行された 直近の DELETE, INSERT, UPDATE 文によって作用した行数を返します。

SELECT文のような、結果セットを生成するSQLステートメントについては動作が未定義です。 動作はドライバによって異なる可能性があります。 データベース(例: MySQL のバッファリングモード)によっては、文によって返された行数を返すかもしれません。しかしながら、 この振る舞いは全てのデータベースで保証されていません。 さまざまな場所で使用するアプリケーションでは、 これに頼ってはいけません。

注意:

このメソッドは SQLite ドライバの場合はあらゆる場合に "0" (ゼロ) を返します。 PostgreSQL ドライバの場合は ステートメント属性 PDO::ATTR_CURSOR の設定が PDO::CURSOR_SCROLL の場合にだけ "0" (ゼロ) を返します。

パラメータ

この関数にはパラメータはありません。

戻り値

行の数を返します。

エラー / 例外

PDO::ATTR_ERRMODEPDO::ERRMODE_WARNING に設定されていた場合、E_WARNING レベルのエラーが発生します。

PDO::ATTR_ERRMODEPDO::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