具有可能未设置的变量的MYSQL查询

时间:2013-07-20 14:45:04

标签: mysql

我有一个PHP文件,它接受七个变量,如:

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

其中一些不会被设定。我想要做的是构建一个查询,它将搜索成员表,如果只设置$ email和$ dob,它将只搜索$ email和$ dob,忽略其他。或者,如果仅设置$ phone,$ name和$ gender,它将仅搜索这三列。

是否有一种更简单的方法,而不是构建一大块if isset函数,涵盖所有可能的排列?

2 个答案:

答案 0 :(得分:0)

如果您不想搜索字段,请为参数传递NULL并构造WHERE子句,如...

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

我没有在MYSQL上花太多时间,所以语法可能有点偏,但你明白了。

答案 1 :(得分: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 + '\')'
      }
 }

然后,当你重新获得变量时,就这样构建一个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,所以语法可能有些搞砸了。)