MySQL + PHP +基于多个输入而不是所有输入都查询表中的多个列

时间:2019-06-13 22:08:15

标签: php mysql

我希望能够使用与表中的多个列相关的多个表单输入来查询数据库中的表。我遇到的问题是,并非所有表单输入都是必需的。

一些细节...

我有一个称为用户的表。该表有很多列,但我要查询的是first_name,last_name,位置,状态(0或1)。

我在搜索表单上有三个输入。名称(文本),位置(选择)和状态(选择)。用户不必为所有输入都输入一个输入,只需一个即可。

我遇到的主要问题是根据输入内容编写查询。我可以使其与多个else / if语句配合使用,例如...

if($_POST['name'] && !$_POST['location'] && !$_POST['status']){
$query = '[QUERY THAT MATCHES NAME]';
} else if($_POST['name'] && $_POST['location'] && !$_POST['status']){
$query = '[QUERY THAT MATCHES NAME AND LOCATION]';
} else if($_POST['name'] && $_POST['location'] && $_POST['status']){
$query = '[QUERY THAT MATCHES NAME AND LOCATION AND STATUS]';
} else if {
etc...
}

但是,这变得非常混乱,很快,因为我需要9个左右的“ else if”语句来覆盖所有可能的情况。

我的问题是,有没有一种更简洁的方法来处理单个查询,或者至少不包含所有这些“ else if”语句?

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

$query = 'SELECT * FROM TABLE WHERE';
$flag = 0;
if ($_POST['name']) {
    $query .= ' NAME = "' . $_POST['name'] . '"';
    $flag = 1;
}
if ($_POST['location']) {
    if ($flag) { $query .= " AND "; }
    $query .= ' LOCATION = "' . $_POST['location'] . '"';
    $flag = 1;
}
if ($_POST['status']) {
    if ($flag) { $query .= " AND "; }
    $query .= ' STATUS = "' . $_POST['status'] . '"';
}

尽管如此,我不确定它将使您的代码看起来更好。

这也是假设您将至少有一个通过邮寄请求传递的值。