PHP 7とMySQLデータベースへのPDO接続を使用してアプリケーションを構築しています。PHP配列からのPDO検索クエリの作成
アプリケーションの一部には、ユーザーがコースのカテゴリ、コース名、および日付の3つの異なるフィールドでトレーニングコースを検索できる検索フォームが含まれています。
フォーム上の要素の種類は次のとおりです。
- コースカテゴリ - ドロップダウン、(int型)のIDの数値を持ちます。
- コース名 - テキスト入力
- 日付ピッカー(HTML 5
type="date"
パラメータを使用してブラウザでカレンダーを取得)。
これらのフィールドは、一緒に使用することも、単独で使用することもできます。これは、例えば、(1)、(2 & 3)、またはall(1 3)だけで検索できることを意味します。
私はPOSTデータを取得するためにPHPを書いてきたし、それが配列で、今だ - 例えば:
$search_data = [
'category' => 3,
'name' => 'Hazard training',
'date' => ''
]
私は、PDOクエリ内にこれを使用したいが、私は何を最もよく知っていません(1)と(3)は=
のクエリ条件になりますが、(2)はLIKE
であるためです。私のソリューションは、検索用語をループして、次にクエリを構築しようとしていました。
$sql = ' WHERE ';
foreach ($search_data as $key => $value) {
if ($key == 'category') {
$sql .= ' category = ' . $value;
}
if ($key == 'course_name') {
$sql .= ' course_name LIKE % ' . $value ' % ';
}
if ($key == 'date') {
$sql .= ' date = ' . $value;
}
}
この問題は、PDOでパラメータをバインドする必要があるために問題になります。また、各クエリの間にAND
を取得する方法が見つからないため(先行する文がある場合)は機能しません。
私はこれで迷っています。これを書くにはどうすればよいかわかりません。
ご協力いただければ幸いです。
編集:私はその名前をハードコードすることを認識しています。 ($key == 'course_name')
は理想的ではありませんが、これは異なるクエリ条件(LIKE
と=
)のためにのみ実行されています。私は1つが$search_data
多次元のクエリの種類を言うことができると仮定しますが、これは私の最初の問題とおそらく別の投稿を超えています。
私は「WHERE 1」が好きで、簡単に作れます。 – Veve
私は 'course_name'部分を' $ pdoData [':course_name'] = '%'に変更しました。 $値。 '%'; 'LIKE%:course_name% 'が意図したとおりに動作するとは思わない... –
($ key ===' category '&&!empty($ value)) – JYoThI