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