2013-07-20 3 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']; 

Некоторые из них не будет установлен. Я хочу создать запрос, который будет искать таблицу участников таким образом, что если заданы только $ email и $ dob, он будет искать только $ email и $ dob, игнорируя остальные. Или, если установлены только $ phone, $ name и $ gender, он будет искать только эти три столбца.

Есть ли более простой способ, чем построение большого блока if, если функции isset охватывают все возможные перестановки?

ответ

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

Я не использую параметры, просто такие переменные, как «$ county» – RJMB

+0

Итак, как вы получаете значения в запросе: вы составляете одну длинную строку запроса в PHP? – Curt

Смежные вопросы