Forum und email

PDOStatement->rowCount()

(PHP 5 >= 5.1.0, PECL pdo:0.1-1.0.3)

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

説明

PDOStatement
int rowCount ( void )

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

関連する PDOStatement によって実行された直近の SQL ステートメントが SELECT 文の場合、いくつかのデータベースは文によって返された 行数を返すかも知れません。しかしながら、 この振る舞いは全てのデータベースで保証されていません。 さまざまな場所で使用するアプリケーションでは、 これに頼ってはいけません。

返り値

行の数を返します。

Example#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");
?>

上の例の出力は以下となります。

Deleted 9 rows.

Example#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;
?>

上の例の出力は以下となります。

apple
banana
orange
pear