0

我有一个 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 函数更简单的方法?

4

2 回答 2

0

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

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

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

于 2013-07-20T14:48:46.430 回答
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,所以语法可能有点搞砸了)。

于 2013-07-20T14:48:54.973 回答