[英]MySql search using PHP based on multiple variable fields
我試圖在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
',但是當滿足第一個條件時,代碼停止並且不檢查下一個條件
任何人都能給我一個線索嗎?
先謝謝您的幫助....
嘗試這個:-
$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);
<?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);
?>
示例,未經過測試,需要大量針對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;
您還可以使用PDO和param綁定來避免SQL注入: http : //www.php.net/manual/fr/pdostatement.bindparam.php
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.