![](/img/trans.png)
[英]How to pass an array to a MySQL query using multiple WHERE clauses
[英]How can execute a MySQL query with multiple WHERE-clauses?
您將如何執行mysql查詢,以便用戶可以從多個選項中進行選擇。 Fox的例子我有一個用戶可以用來搜索房屋的表格。 現在,我有一個選擇框,您可以在其中選擇是否要房子,公寓還是其他。 然后,我有第二個框,您可以在其中選擇想要的房屋或公寓所在的城市。也許還有一個價格最高的框。
現在,您將如何執行mysql查詢? 我的問題是,我會那樣做:if($ _ POST [“ house_type”]!= 0){$ select = mysql_query(“ SELECT * FROM WHERE type ='”。$ _ POST [“ house_type”]。“ ““); }但是,現在我只遇到有人選擇房屋類型而沒有其他選擇的情況。 那么,是否必須對所選元素的每種可能組合都執行“ if”操作?
為了強調我的問題:
if(!isset($_POST["house_type"])) {
if($_POST["something"] == 0) {
$search_select = @mysql_query("SELECT * FROM housedata WHERE something = $_POST["whatever"]);
}
elseif($_POST["something"] != 0) {
$search_select = @mysql_query("SELECT * FROM housedata something = $_POST["whatever"] AND somethingelse = 'whatever');
}
}
elseif(!isset($_POST["house_type"])) {
if($_POST["something"] == 0) {
$search_select = @mysql_query("SELECT * FROM housedata WHERE something = $_POST["whatever"]);
}
elseif($_POST["something"] != 0) {
$search_select = @mysql_query("SELECT * FROM housedata something = $_POST["whatever"] AND somethingelse = 'whatever');
}
}
現在想象一下,我有10或20個不同的選擇框,輸入字段和復選框,而我將不得不根據這些框和字段和復選框中的內容進行mysql查詢。 這將是極其復雜,緩慢且可怕的代碼。 所以有可能使像這樣的mysql查詢:
SELECT * FROM whatever WHERE house_data = '".$whatever."' AND (if(isset($_POST["something"])) { whatever = '".$whatever2."' } AND ...;
你明白我的意思嗎? 解釋起來有點復雜,但實際上它是一個非常重要的問題,可能很容易回答。
謝謝您的幫助! phpheini
在運行SQL之前生成WHERE子句。
一個簡短的例子:
$whereClause = "";
if ($_POST['opt1']) {
$opt1 = mysql_real_escape_string($_POST['opt1']);
$whereClause .= "AND opt1='$opt1'";
}
if ($_POST['opt2']) {
$opt2 = mysql_real_escape_string($_POST['opt2']);
$whereClause .= "AND opt2='$opt2'";
}
mysql_query("SELECT * FROM table WHERE 1 ".$whereClause);
$where = array();
if($_POST["something"]) {
$where[] = " something =".$_POST["something"];
}
if($_POST["something2"]) {
$where[] = " something2=".$_POST["something2"];
}
.
.
.
//build where string
$where_ = !(empty($where) ? " WHERE ".implode(" AND ",$where) : "";
//build sql
$sql = "SELECT * ... ".$where;
為了使您向正確的方向稍微走一點,請嘗試如下操作:
if(isset($_POST["something"]))
{
$where = " AND whatever = '".$whatever2."'";
}
else $where = '';
mysql_query("SELECT * FROM whatever WHERE house_data = '".$whatever."'".$where);
寫一些簡單的查詢生成器
$where = array();
if($_POST["something"]) {
$where[] = sprintf(" something='%s'",$_POST["something"]);
// sprintf-防止SQL注入}
if($_POST["something2"]) {
$where[] = sprintf(" something2='%s'",$_POST["something2"]);
}
//build where string
$where_str = " WHERE ".implode(" AND ",$where);
//build sql
$sql = "SELECT * ... $where_str";
您需要分別構建搜索字符串,但是格式很簡單
SELECT * FROM your_table WHERE number = {$number} AND sentence = '{$sentence}';
由於要基於PHP邏輯創建搜索詞,因此請執行以下操作:
$search = "SELECT * FROM your_table WHERE ";
if(isset($whatever)) $search .= "something = '{$whatever}'";
if(isset($whateverelse)) $search .= " AND somethingelse = '{$whateverelse}'";
$search_select = mysql_query($search);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.