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

MySQL+PHP+基于多个输入查询表中的多个列,而不是所有需要的输入,php,mysql,Php,Mysql,我希望能够使用与表中多个列相关的多个表单输入来查询数据库中的表。我遇到的问题是,并非所有表单输入都是必需的 一点细节 我有一个名为users的表。此表有许多列,但我要查询的是first_name、last_name、location、status 0或1 我在搜索表上有三个输入。名称文本、位置选择和状态选择。用户不必为所有输入输入,只需输入一个 我遇到的主要问题是基于输入编写查询。我可以让它与多个else/if语句一起工作,例如 if($_POST['name'] && !$_P

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

一点细节

我有一个名为users的表。此表有许多列,但我要查询的是first_name、last_name、location、status 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个左右的if语句来覆盖所有可能的场景


我的问题是,是否有一种更干净的方法可以在单个查询中处理此问题,或者至少不使用所有其他if语句?

您可以按照以下方式进行操作:

$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'] . '"';
}
尽管如此,我不确定它会让你的代码看起来更好


另外,这是假设您将通过post请求传递至少一个值。

您可以按照以下方式执行操作:

$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'] . '"';
}
尽管如此,我不确定它会让你的代码看起来更好


另外,这是假设您的post请求中至少会传递一个值。

或者?从first_name喜欢的用户中选择*?你姓什么?等。将通配符%绑定到每个值的末尾。您应该能够在一条sql语句中获取所有逻辑。如果您需要更多帮助,请显示一些sql语句。我不确定你的9种排列方式是什么,关于还是?从first_name喜欢的用户中选择*?你姓什么?等。将通配符%绑定到每个值的末尾。您应该能够在一条sql语句中获取所有逻辑。如果您需要更多帮助,请显示一些sql语句。我不确定你的9种排列方式是什么你应该重写你的答案以使用准备好的陈述,否则它将被否决。你应该重写你的答案以使用准备好的陈述,否则它将被否决。