我正在尝试根据用户输入在MySql数据库中搜索,如下所示。
用户可以/不从以下字段中选择
<select name="field_one" id="f1">
<option value="AA">AA</option>
<option value="BB">BB</option>
<option value="CC">CC</option>
</select>
<select name="field_two" id="f2">
<option value="11">11</option>
<option value="22">22</option>
<option value="33">33</option>
</select>
如果User仅选择'field_one',则mysql_query应仅基于'field_one'进行过滤。在这种情况下,可以有四种组合
进行此搜索的最佳和最有效的方法是什么?
我尝试使用“case .... break;
”和“if
”,但是当满足第一个条件时,代码会停止,并且不会检查下一个条件
任何人都能给我一个线索吗?
提前感谢您的帮助......
答案 0 :(得分:1)
试试这个: -
$query = "select * from table_name where 1 ";
if(!empty($_POST['field1']) ) {
$query .= " AND field1 like '".trim($_POST['field1'])."'";
}
if(!empty($_POST['field2'])) {
$query .= " AND field2 like '".trim($_POST['field2'])."'";
}
// and so on
$result = mysql_query($query);
答案 1 :(得分:1)
<?php
$sql = "SELECT * FROM table_name WHERE 1";
if(isset($_POST)){
if(isset($_POST['field_one'])){
$sql.= 'AND field_one'= $_POST['field_one'];
}
if(isset($_POST['field_two'])){
$sql.= 'AND field_two'= $_POST['field_two'];
}
}
mysql_query($sql);
?>
答案 2 :(得分:0)
示例,未经过测试,需要大量针对SQL注入的变量处理
$where = "";
$bits = array();
$bitset=false;
if(isset($_POST['field_one') && strlen($_POST['field_one')) > 0)
{
$bitset = true;
$bits[] = " field1 = $_POST['field_one')"
}
if(isset($_POST['field_two') && strlen($_POST['field_two')) > 0)
{
$bitset = true;
$bits[] = " field2 = $_POST['field_two')"
}
if($bitset)
{
$where = implode(", " $bits);
}
$sql = "select * from table " . $where;
答案 3 :(得分:0)
你也可以使用PDO&amp; param绑定以避免SQL注入:http://www.php.net/manual/fr/pdostatement.bindparam.php