2013-07-04 37 views
0

如何讓mysql搜索僅僅由用戶以html格式寫入的內容定義,如果某些表單框保持爲空,則mysql應該忽略它。例如:如何使查詢忽略未定義的變量?

$sql = "SELECT * FROM catalog WHERE name= '".$name."' AND publisher = '".$publisher."' "; 
mysql_query($sql); 

此查詢將顯示名稱和發佈者在一起的所有行。現在,如果用戶只插入名稱,並將發佈者框留空,該怎麼辦。這個想法是,PHP/MySQL忽略空的表單框,並顯示插入名稱的每一行。但它不會這樣做,因爲$ publisher將會是未定義的,並且會出現錯誤。如何告訴musql忽略$ publisher?更一般的問題是:如何生成查詢,使查詢按照某些標準進行定義(如果它們存在),以及它們是否不怎麼忽略它?

+0

如果用戶想要注入他們自己的查詢,那麼讓他們也這樣做... – elclanrs

+1

您需要驗證輸入,並在一系列if語句(或切換案例)之前構建查詢。 – Dave

回答

2

您可以通過編程方式構建sql。我假設你已經正確地逃脫了價值。

$sql = "SELECT * FROM catalog"; 

$wheres = array(); 
if (!empty($name)) { 
    $wheres[] = " name = '$name'"; 
} 
if (!empty($publisher)) { 
    $wheres[] = " publisher = '$publisher'"; 
} 

if (count($wheres)) { 
    $sql .= " WHERE " . implode (' AND ', $wheres); 
} 

//RUN SQL 

也有一個讀通過this,您使用的是過時的MySQL庫。

0

這將允許名稱或發佈者爲NULL

<?php 
$sql = "SELECT * FROM catalog WHERE (name= '".$name."' OR name IS NULL) AND (publisher = '".$publisher."' OR publisher IS NULL)"; 
mysql_query($sql); 
0

嘗試像

$my_var = " "; 
if($publisher) //if(!empty($publisher)) 
    $my_var = " AND publisher = '".$publisher."' "; 

$sql = "SELECT * FROM catalog WHERE name= '".$name."' ".$my_var; 

如果發佈者是空的,那麼你需要通過NULL值和PLZ注意,這是一個糟糕practise.It會導致許多SQL注入issues.Try放對事物的驗證

+0

但你不能比較相等的運算符與空sql –

+0

請嘗試我編輯ans – Gautam3164

+0

謝謝大家,人。 – natttan