PHPにおけるPDOの位置プレースホルダー

位置プレースホルダーの操作方法を見ていきましょう。クエリに挿入したい2つの変数があるとします:

php<?php
  $min = 1;
  $max = 5;
?>

これらの変数を次のように挿入したいとします:

php<?php
  $sql = "SELECT * FROM users WHERE id>$min and id<$max";
?>

しかし、この方法は安全ではありません。 変数を直接挿入する代わりに、疑問符で表される位置プレースホルダーに置き換えましょう:

php<?php
  $sql = 'SELECT * FROM users WHERE id>? and id<?';
?>

次に、クエリを準備するコマンドを実行します:

php<?php
  $res = $pdo->prepare($sql);
?>

次に、変数を含む配列をパラメータとして渡してクエリを実行します。このとき、 変数は配列内に指定された順序でクエリに挿入されます:

php<?php
  $res->execute([$min, $max]);
?>

その後、クエリの結果を取得できます:

php<?php
  while ($row = $res->fetch()) {
    var_dump($row);
  }
?>

すべてをまとめると、次のコードになります:

php<?php
  $min = 1;
  $max = 5;
  
  $sql = 'SELECT * FROM users WHERE id>? and id<?';
  $res = $pdo->prepare($sql);
  
  $res->execute([$min, $max]);
  
  while ($row = $res->fetch()) {
    var_dump($row);
  }
?>
Задание 1

以下の変数が与えられています:

php<?php
  $age = 30;
  $salary = 1000;
?>

年齢または給与が変数に指定された値と等しいすべてのユーザーを見つけてください。

Задание 2

あなたのコードに対してSQLインジェクションを試みてください。それが通らないことを確認してください。