0

MYSQLクエリに少し問題があります

私は製品でいっぱいのDBを持っており、ユーザーが結果を取得したい時刻を選択できるドロップダウンメニューを持っています:-

  • 落ちる
    • 朝ごはん
    • ランチ
    • どんなときも

現時点で私の声明は

SELECT * from DEALS WHERE timeofday='post data from form';

これで問題なく動作しますが、「いつでも」のオプションを使用して、クエリで上記のすべて/いずれかの結果を検索できるようにしたいと思います。

私はおそらく、2つの別々のクエリを起動するIFステートメントを実行することを考えていました$_POST['timeofday'] == 'Anytime'

SELECT * from DEALS where timeofday='Breakfast' 
OR timeofday='Lunch' OR timeofday='Evening';

それ以外の場合は、通常のクエリを実行しますが、1つのステートメントでこれを実行できるかどうか疑問に思います。

敬具

4

4 に答える 4

3
$query = 'SELECT * from DEALS';
if ($_POST['timeofday'] != 'Anytime') {
    $query .= ' WHERE timeofday="' . $_POST['timeofday'] . '"';
}

DCoderが述べたように、このアプローチはSQLインジェクションに対して脆弱です...入力をチェック/サニタイズするか、準備されたステートメントを使用する必要があります。この場合、定義済みの値のセットがあり、次のことができます。

$knownTimesOfDay = array('Breakfast', 'Lunch', 'Evening', 'Anytime');
if (!in_array($_POST['timeofday'])) {
    die('Unsuppotred time of day... Did it really come from the form?');
}
$query = 'SELECT * from DEALS';
if ($_POST['timeofday'] != 'Anytime') {
    $query .= ' WHERE timeofday="' . $_POST['timeofday'] . '"';
}
于 2012-07-08T11:15:31.983 に答える
0

これは、テーブルにあるアイテムによってはマイナスになる可能性がありますが、次を使用できます。

SELECT * from DEALS where timeofday LIKE '%{$post_data}%'

timeofday$ post_dataが空の文字列の場合、すべての結果が返されます。

于 2012-07-08T11:51:33.463 に答える
0

1 つのステートメントで実行できるとは思わないでください。

とにかく、if ステートメントを使用する必要があります。

于 2012-07-08T11:16:22.827 に答える
0

これらが timeofday の 3 つの可能な値のみである場合、次のように php スクリプトに if を含めることができます。

if($_POST['timeofday'] != 'Anytime' )
    sql .= "where timeofday='".$_POST['timeofday']."'";
于 2012-07-08T11:16:45.787 に答える