PDOStatement::rowCount
(no version information, might be only in CVS)
PDOStatement::rowCount --
直近の SQL ステートメントによって作用した行数を返す
説明
int
PDOStatement::rowCount ( void )
PDOStatement::rowCount() は
相当する PDOStatement オブジェクトによって実行された
直近の DELETE, INSERT, UPDATE 文によって作用した行数を返します。
関連する PDOStatement によって実行された直近の
SQL ステートメントが
SELECT 文の場合、いくつかのデータベースは文によって返された
行数を返すかも知れません。しかしながら、
この振る舞いは全てのデータベースで保証されていません。
また、ポータブルなアプリケーションでは信用するべきではありません。
例
例 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"); ?>
|
上の例の出力は以下となります。 |
例 2. SELECT 文によって返された行をカウントする
ほとんどのデータベースでは、PDOStatement::rowCount()
は SELECT 文によって作用した行数を返しません。代わりに、
PDO::query() を使って
意図する SELECT 文として同様の述部を持つ SELECT COUNT(*)
文を発行し、PDOStatement::fetchColumn()
を使って返される行数を取得することができます。
そうすることで、アプリケーションは正しい動作をすることができます。
<?php $sql = "SELECT COUNT(*) FROM fruit WHERE calories > 100"; if ($res = $conn->query($sql)) {
/* SELECT 文にマッチする行数をチェックする */ if ($res->fetchColumn() > 0) {
/* 実際の SELECT 文を発行紙、結果を処理する */ $sql = "SELECT name FROM fruit WHERE calories > 100"; foreach ($conn->query($sql) as $row) { print "Name: " . $row['NAME'] . "\n"; } } /* 行がマッチしなかった場合 -- 他に何かをする */ else { print "No rows matched the query."; } }
$res = null; $conn = null; ?>
|
上の例の出力は以下となります。 |
参考
PDOStatement::columnCount() |
PDOStatement::fetchColumn() |
PDOStatement::query() |