2013-07-20 25 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