我的MYSQL查询有点麻烦

我有一个充满产品的数据库,并且有一个下拉菜单,用户可以通过该菜单选择一天中的什么时间获取结果:


落下

早餐
午餐
晚间
任何时候



目前,我的发言是

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


现在可以正常工作,但是可以选择“ Anytime”(任意),我希望查询能够搜索上述所有/任何结果。

我正在考虑做一个IF语句,它会触发2个单独的查询,其中一个语句说明$_POST['timeofday'] == 'Anytime'然后是否触发

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


否则,只是执行普通查询,尽管想知道是否有可能仅用一条语句来执行此操作。

亲切的问候

最佳答案

$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'] . '"';
}

10-06 13:22