我有一个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函数,涵盖所有可能的排列?
答案 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,所以语法可能有些搞砸了。)