【PHP】PDOで件数を取得するrowCountの使い方
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で問い合わせを行った場合は、対象の行数分のカウントを取得します。
$sql = "SELECT * FROM users"; $sth = $pdo -> query($sql); $count = $sth -> rowCount(); echo $count.'件SELECTしました。';
rowCount()以外にも、「SELECT COUNT(*)~」のクエリで件数を取得する方法もあります。
参考 【PHP】PDOのfetchで取得できる配列パターン一覧
INSERTした件数を取得する
テーブルにデータを挿入するINSERT文も、追加した行数分の値が取得できます。
$sql = "INSERT users(name, gender, age, pref) VALUES ('坂本', 'man', 15, '栃木'), ('小林', 'woman', 15, '埼玉')"; $sth = $pdo -> query($sql); $count = $sth -> rowCount(); echo $count.'件INSERTしました。';
UPDATEした件数を取得する
UPADTE文で更新を行った行数も、rowCount()で取得することによって確認できます。
$sql = "UPDATE users SET age = 15 WHERE gender = 'woman'"; $sth = $pdo -> query($sql); $count = $sth -> rowCount(); echo $count.'件UPDATEしました。';
「更新対象の行数」ではなく「更新された行数」を取得します
上記のUPDATE文で更新対象として返ってきた件数は2件でした。
WHERE区で指定されていた「gender = woman」は3人いるのですが、うち1人は「age」が既に15となっているため、その分の行は更新対象としてカウントされません。
なので、変更された2人分が、rowCount()の対象として取得されています。
クエリ自体は正しくても0が返る可能性があり、rowCount()の数値でクエリの成功・失敗を判断するのは控えたほうが良いでしょう。
あくまで「変更された行数」を取得したい場合はUPDATE句でも有用です。
DELETEした件数を取得する
最後に、DELETE文で削除された件数の取得方法です。
他と同じように、クエリ後にrowCount()の実行で取得できます。
$sql = "DELETE FROM users WHERE pref = '愛知'"; $sth = $pdo -> query($sql); $count = $sth -> rowCount(); echo $count.'件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の使い方、でした。
ディスカッション
コメント一覧
まだ、コメントがありません