通过MySQL搜索查询传递多个$ _POST字段

时间:2013-03-05 21:10:58

标签: php mysql

我有一个搜索表单,可能有15个左右的字段,但并不是所有字段都需要进行搜索,例如;

用户可能会在“伦敦”中搜索“财务”中的注册用户,但将所有其他字段留空,例如$ availability或$ salary等,因此$ _POST数据可能如下所示:

$location = $_POST['location'];    // Value - London
$sector = $_POST['sector'];        // Value - Finance
$available = $_POST['available'];  // Value - Any
$salary = $_POST['salary'];        // Value - Any

请记住,我可能还有另外12个左右来自其他字段的'Any'值,查询数据库(PHP / MySQL)返回结果的最佳方法是什么,而不会循环查看可能有几十个查询的内容。 / p>

为了尝试并且更清楚一点,我想要的是一个类似(故意伪代码)的查询:

SELECT * FROM table where location = 'location' AND if($availability !='Any') { available = '$available' } etc etc

这样的事情可能吗?

或者我可以创建一个包含所有$ _POST字段的单个字符串!='Any'然后对包含字符串中所有单词的行进行搜索(我认为理论上会起作用)?

我希望这对某人有意义,你可以指出我正确的方向。

P.S。在与数据库交互之前,所有$ _POST都被转义和保护,这里不包括:)

3 个答案:

答案 0 :(得分:2)

试试这个:

$sql = "SELECT * FROM table where 1 ";
foreach ($_POST as $key => $post) {
    if ($post != 'Any') {
        $sql .= " AND $key = '$post' ";
    }
}

// now you can run $sql against the database

答案 1 :(得分:1)

为了论证的缘故,您可以将所有$ _POST收集到foreach($ key => $ val)中,然后通过开关运行密钥,或者如果将“AND x = x”附加到语句中吗? / p>

类似的东西:

$sql = "SELECT * FROM table WHERE required='required'";
foreach($_POST as $key=>$val){
if(!empty($val)){ $sql .= " AND ".$key."='".$val"'"; }
}

不确定这是否有效但理论上这是我首先想到的。

答案 2 :(得分:0)

感谢那些提供答案的人,但是我使用了上述链接中的建议答案,因为它对我来说更清楚。粘贴在FYI下方的示例代码:

$tmp = "where ";
if($A and $A!="any" and $A!="not used")
$tmp .= "row1 = '".$A."'";
if($B and $B!="any" and $B!="not used")
$tmp .= "AND row2 = '".$B. "'";
if($C and $C!="any" and $C!="not used")
$tmp .= "AND row3 = '".$C."'";
$db_q = "Select * from table $tmp"; 

再次感谢,不知道在没有SO的地方。