Developer

【PHP応用】 PDO⑰ WHERE句が動的に変わる場合
2021.09.30
Lv2

【PHP応用】 PDO⑰ WHERE句が動的に変わる場合

PHPのPDOで、WHERE句の条件を動的に変更する場合があります。
例えば、以下のプログラムでは、
年齢(age)がフォーム内で入力されているときのみ、
DB内のage列と照合して、両者の値が同じ行だけを抽出します。
しかし、年齢(age)が入力されていない場合、全件出力しています。

このような動的WHERE句の組み立てを行う、
組み込み関数や構文がないので、
if節を使って手動で行う必要があります。

where句が動的に変わる場合(例えば絞込み検索条件など)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 何も入力がない場合全件出力
$sql = "select * from member where 1=1 ";
 
// フォームで、年齢欄に入力があった場合
if(!empty($_POST["age"])){
    // DB内のage列と同一のもののみ出力するようWHERE条件追加
    $sql .= "and age=? ";
    $where[] = $_POST["age"];
}
 
// WHERE条件の値リスト$whereの値を、順番にプレースホルダーにセット
for($where_i = 0; $where_i < count($where); $where_i++){
    // bindParamのインデックスは1始まりなので補正する
    $param_i = $where_i+1;
     
    // 値を設定していく
    $stmt->bindParam($param_i, $where[$where_i]);
}

PHPWEBプログラミング講座 連載目次リンク

PHPWEBプログラミング講座 連載目次