2021.09.30
【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]); }