【PHP】PDOで件数を取得するrowCountの使い方

2019年12月20日

PHPのPDOオブジェクトには、クエリ処理後に該当の件数を取得できるrowCount()というメソッドがあります。

今回は、SELECT(参照)、INSERT(挿入)、UPDATE(更新)、DELETE(削除)の処理毎にrowCount()の使用例をサンプルコードで解説します。

サンプルとして使用するテーブルはこちら↓。

table名:users
id(AI) name gender age pref
1 田中 man 15 東京
2 佐藤 man 15 大阪
3 高橋 woman 14 千葉
4 山田 woman 15 埼玉
5 中村 woman 14 愛知

SELECTした件数を取得する

SELECTで問い合わせを行った場合は、対象の行数分のカウントを取得します。

参考 PDOでSELECTの使い方【PHP】

$sql = "SELECT * FROM users";
$sth = $pdo -> query($sql);
$count = $sth -> rowCount();

echo $count.'件SELECTしました。';
5件SELECTしました。

rowCount()以外にも、「SELECT COUNT(*)~」のクエリで件数を取得する方法もあります。

参考 【PHP】PDOのfetchで取得できる配列パターン一覧

INSERTした件数を取得する

テーブルにデータを挿入するINSERT文も、追加した行数分の値が取得できます。

参考 PDOでINSERTの使い方【PHP】

$sql = "INSERT users(name, gender, age, pref)
        VALUES
        ('坂本', 'man', 15, '栃木'),
        ('小林', 'woman', 15, '埼玉')";
$sth = $pdo -> query($sql);
$count = $sth -> rowCount();

echo $count.'件INSERTしました。';
2件INSERTしました。

UPDATEした件数を取得する

UPADTE文で更新を行った行数も、rowCount()で取得することによって確認できます。

参考 PDOでUPDATEの使い方【PHP】

$sql = "UPDATE users
        SET age = 15
        WHERE gender = 'woman'";
$sth = $pdo -> query($sql);
$count = $sth -> rowCount();

echo $count.'件UPDATEしました。';
2件UPDATEしました。

「更新対象の行数」ではなく「更新された行数」を取得します

上記のUPDATE文で更新対象として返ってきた件数は2件でした。

WHERE区で指定されていた「gender = woman」は3人いるのですが、うち1人は「age」が既に15となっているため、その分の行は更新対象としてカウントされません。
なので、変更された2人分が、rowCount()の対象として取得されています。

クエリ自体は正しくても0が返る可能性があり、rowCount()の数値でクエリの成功・失敗を判断するのは控えたほうが良いでしょう。

あくまで「変更された行数」を取得したい場合はUPDATE句でも有用です。

DELETEした件数を取得する

最後に、DELETE文で削除された件数の取得方法です。

参考 PDOでDELETEの使い方【PHP】

他と同じように、クエリ後にrowCount()の実行で取得できます。

$sql = "DELETE FROM users
        WHERE pref = '愛知'";
$sth = $pdo -> query($sql);
$count = $sth -> rowCount();

echo $count.'件DELETEしました。';
1件DELETEしました。

ON DUPLICATE KEY UPDATEの件数を取得する

UNIQUE制約に引っかかるデータを挿入しようとした場合はUPDATE、新規のデータの場合はINSERTの処理を行える「ON DUPLICATE KEY UPDATE」は、更新行は1行に対して2、挿入行は1とカウントします。

2件のデータを挿入しようとして、1件がON DUPLICATE KEY UPDATEとなった場合は、3が返ってきます。

参考 PDOのrowCount()をON DUPLICATE KEY UPDATEで行った場合


rowCount()はお手軽に件数が取得できる関数なので、各処理毎の仕様を理解して活用していきましょう。

以上、PDOで件数を取得するrowCountの使い方、でした。

PHP