0

我的 MYSQL 查询有点问题

我有一个装满产品的数据库,我有一个下拉菜单,让用户可以选择他们希望在一天中的什么时间获得结果:-

  • 落下
    • 早餐
    • 午餐
    • 晚上
    • 随时

目前我的声明是

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

现在这工作正常,但使用“随时”选项,我希望查询能够搜索上述所有/任何结果的结果。

我在想也许做一个 IF 语句,它会触发 2 个单独的查询,一个说如果$_POST['timeofday'] == 'Anytime'然后触发

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

否则只需执行正常查询,尽管想知道是否可以仅在一个语句中执行此操作。

亲切的问候

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

不要认为它可以在一个声明中完成。

无论如何,您将不得不使用 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 回答
0

根据表中的项目,这可能会变成负数,但您可以使用:

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

timeofday如果 $post_data 是空字符串,它将返回所有结果。

于 2012-07-08T11:51:33.463 回答