2013-07-20 32 views
0

我有走在七個變量,像這樣的PHP文件:與變量MySQL查詢可能不被設置

$name=$_REQUEST['membername']; 
$email=$_REQUEST['email']; 
$dob=$_REQUEST['dob']; 
$gender=$_REQUEST['gender']; 
$phone=$_REQUEST['phone']; 
$county=$_REQUEST['county']; 
$IP=$_REQUEST['IP']; 

有些不會設置。我想要做的是構造一個查詢,它將搜索members表,這樣如果只設置了$ email和$ dob,它將只能通過$ email和$ dob進行搜索,而忽略其他的。或者,如果只設置$ phone,$ name和$ gender,它將只搜索這三列。

是否有比構建涵蓋所有可能排列的ifset函數的大塊更簡單的方法?

回答

0

如果您不想在搜索領域,傳遞NULL作爲參數,構造你的WHERE子句類似...

WHERE 
((@parameter1 IS NULL) OR (column1 = @parameter1)) 
AND 
((@parameter2 IS NULL) OR (column2 = @parameter2)) 

我不會花太多的時間在MYSQL所以,語法可能有點偏離,但你明白了。

0

假設你使用的參數值推入查詢...

SELECT * 
    FROM MyTable 
WHERE name = COALESCE(@p1, name) 
    OR email = COALESCE(@p2, email) 
    OR dob = COALESCE(@p3, dob) 
    ... 

...

如果您在PHP構建一個查詢字符串就可以了,而是採取另一種策略:

function AddWhere(&$where, $dbFieldName, $fieldValue) 
{ 
     if ($fieldValue <> "") 
     { 
     if (strlen($fieldName) > 0) 
      $fieldName .= " AND "; 

     $fieldname .= '(' + $dbFieldName + ' = \'' + $fieldValue + '\')' 
     } 
} 

然後,當你retrived變量,建立一個SQL語句正是如此

$whereClause = '' 
AddWhere($whereClause, 'name', $name) 
AddWhere($whereClause, 'email', $email) 
AddWhere($whereClause, 'dob', $dob) 
... 
IF (strlen($whereClause) > 0) 
{ 
    $sql = 'SELECT * FROM MyTable WHERE ' + $whereClause 

    ... etc 
} 

(我不擅長PHP,所以語法可能會有些搞砸)。

+0

我沒有使用參數,只是變量像'$縣' – RJMB

+0

那麼你如何獲得值的查詢:你在PHP中構成一個長查詢字符串? – Curt