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

# PDOStatement::rowCount

(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.1.0)

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

### 説明

public function PDOStatement::rowCount(): int

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

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

> 注意:

> このメソッドは、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() - プレースホルダを指定せずに、SQL ステートメントを準備して実行する

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open