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