Developer

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

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

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

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

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

// 何も入力がない場合全件出力
$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プログラミング講座 連載目次