サンプル・プログラムの実行例

サンプル・プログラム
count1.php | サンプル・プログラム |
このプログラムは、「武田」という名前を含むレコードの数を数えるプログラムである。
解説:レコードを数える
51: //実行するSQL
52: define('PRE_COUNT', 'SELECT COUNT(*) FROM chronologic WHERE name LIKE :name');
SQLは、いくつかの統計関数を用意している。COUNT 関数は、条件に一致するレコードの数を数えるものである。

SQLインジェクション対策として、PDOにはプリペアドステートメントという機能が備わっている。
定数 PRE_COUNT に示されているように、値をプレースホルダ :name に分離している。値の実体は定数 NAME に定義してある。
SELECT COUNT(*) FROM chronologic WHERE name like '%武田%';このSQL文は、あいまい検索LIKE演算子を使い、nameに「武田」が含まれるレコードを絞り込み、そのレコード数をCOUNT関数によって数えるものである。

SQLインジェクション対策として、PDOにはプリペアドステートメントという機能が備わっている。
定数 PRE_COUNT に示されているように、値をプレースホルダ :name に分離している。値の実体は定数 NAME に定義してある。
170: //プリペアドステート
171: $stmt = $pdo->prepare($sql);
172: $stmt->bindValue(':name', NAME, PDO::PARAM_STR);
プレースホルダに値をバインドするには PDOStatement::bindParam を使う。
第3引数にはデータ型を指定する。ここで自動的にエスケープ処理などが行われるので、SQLインジェクション対策となる。
第3引数にはデータ型を指定する。ここで自動的にエスケープ処理などが行われるので、SQLインジェクション対策となる。
解説:COUNTの結果を受け取る
173: $stmt->execute();
174: $res = $stmt->fetch();
前述のプリペアドステートメントは、PDOStatement::execute を使うことで実行される。
SQL関数COUNTの結果を受け取るのは、PDOStatement::fetch であるが、結果の配列に工夫が必要である。配列の添字が '0' の中に結果が代入されるのである。

なお、下記のように仮想カラム名を割り当ててやれば、
SQL関数COUNTの結果を受け取るのは、PDOStatement::fetch であるが、結果の配列に工夫が必要である。配列の添字が '0' の中に結果が代入されるのである。

なお、下記のように仮想カラム名を割り当ててやれば、
SELECT COUNT(*) AS num FROM chronologic WHERE name LIKE '%武田%';今までと同様、カラム名で $res['num'] のようにして結果を受け取ることができる。
(この項おわり)
(2022年11月26日)PHP8対応,他.