PDOStatement::rowCount — 前の SQL ステートメントによって影響を受けた行数を返します (PHP 5 >= 5.1.0、PECL pdo >= 0.1.0)
int PDOStatement::rowCount ( void )
PDOStatement::rowCount() 対応する PDOStatement オブジェクトによって実行された最後の DELETE、INSERT、または UPDATE ステートメントによって影響を受けた行数を返します。
関連する PDOStatement によって実行された最後の SQL ステートメントが SELECT ステートメントだった場合、一部のデータはこのステートメントによって返された行数を返す場合があります。ただし、このアプローチはすべてのデータに対して機能することが保証されていないため、ポータブル アプリケーションには依存しないでください。
行数を返します。
PDOStatement::rowCount() DELETE、INSERT、または UPDATE ステートメントの影響を受ける行の数を返します。
<?php/* FRUIT データ テーブルからすべての行を削除します*/$del = $dbh->prepare('DELETE FROM Fruit');$del->execute();/* 削除された行の数を返します*/print ("削除された行数を返します:n");$count = $del->rowCount();print("$count 行削除されました。n");?>
上記の出力例は次のようになります。
削除された行数を返します:削除された 9 行。
ほとんどのデータベースでは、PDOStatement::rowCount() は SELECT ステートメントの影響を受ける行数を返すことができません。あるいは、PDO::query() を使用して、最初に意図した SELECT ステートメントと同じ条件式を使用して SELECT COUNT(*) ステートメントを発行し、次に PDOStatement::fetchColumn() を使用して次の行をフェッチします。これにより、アプリケーションが正しく実行できるようになります。
<?php$sql = "SELECT COUNT(*) FROM フルーツ WHERE カロリー > 100";if ($res = $conn->query($sql)) { /* SELECT ステートメントに一致する行数を確認します*/ if ($ res->fetchColumn() > 0) { /* 実際の SELECT ステートメントを発行し、返された結果を操作します*/ $sql = "SELECT name FROM Fruit WHERE カロリー > 100"; foreach ($conn->query($sql) as $row) { print "Name: " . $row['NAME'] . "n"; } } /* 一致する行はありません - -その他を実行 */ else { print "クエリに一致する行がありません。" }}$res = null;$conn = null;?>
上記の例の出力結果は次のとおりです。
リンゴバナナオレンジ梨