基于多变量字段的PHP MySql搜索
基于多变量字段的PHP MySql搜索,php,mysql,logic,Php,Mysql,Logic,我正在尝试根据用户输入在MySql数据库中搜索,如下所示。 用户可以/不可以从以下字段中选择 <select name="field_one" id="f1"> <option value="AA">AA</option> <option value="BB">BB</option> <option value="CC">CC</option> </select> AA BB 科科斯群岛 &
我正在尝试根据用户输入在MySql数据库中搜索,如下所示。
用户可以/不可以从以下字段中选择
<select name="field_one" id="f1">
<option value="AA">AA</option>
<option value="BB">BB</option>
<option value="CC">CC</option>
</select>
AA
BB
科科斯群岛
<select name="field_two" id="f2">
<option value="11">11</option>
<option value="22">22</option>
<option value="33">33</option>
</select>
11
22
33
如果用户只选择“field\u one”,那么mysql\u查询应该只基于“field\u one”进行过滤。在这种情况下,可以有四种组合
case…”。。。。中断如果
,则代码>”和“”,但当满足第一个条件时,代码停止并不检查下一个条件
有人能给我一个线索吗
提前感谢您的帮助….示例,未经测试,需要针对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;
试试这个:-
$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);
请同时使用转义字符串您还可以使用PDO和param绑定来避免SQL注入:
我已经跳过了,其他人也可能会跳过。此外,您的代码至少有7个语法错误,将生成无效查询。
<?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);
?>