2015-06-11 2 views
-1

Я пытаюсь написать динамический SQL-запрос. запрос работает нормально с intergers. однако, как только я попытался вставить строку, она терпит неудачу.Синтаксическая ошибка при попытке динамически писать поисковый запрос

ниже мой запрос:

public function getList($params['SearchBy']) 
{ 

    $select = " 
     SELECT 
      u.id, u.firstName,u.lastName,u.city"; 

$from = " 
     FROM 
     user u"; 

$where = " 
     WHERE 
      u.live = 1 "; 

    if(isset($params['SearchBy'])) 
    {    
     $where .= 'AND '. implode(' AND ', $params['SearchBy']); 
    } 

    $GroupBy = " 
     GROUP BY 
      u.id "; 

$sql = $select.$from.$where.$GroupBy; 

} 

для searchby(), я динамически производить эти значения из поискового запроса; я затем поместить их в массив .:

$this->searchBy[$key][] = $key.' = '. $val; 

это прекрасно работает, когда сво целое. однако строки должны иметь "". я не уверен, чтобы избежать "", чтобы он появился в запросе.

т.е.
$this->searchBy[$topkey][] = $key.' = '. "$val"; 

я пытался сделать это, но он не работает:

$this->searchBy[$topkey][] = $key.' = '. \"$val\"; 

был бы признателен за любые советы о том, как избежать этого.

спасибо.

ниже - это необработанный запрос sql, полученный из поиска;

SELECT 
     u.id,u.picNo, 
       u.membershipType, 
       u.firstName,u.lastName 
      FROM 
      user u 
     LEFT OUTER JOIN 
       table_messages_between_members sm 
     ON 
       u.id = sm.senderId 
      LEFT OUTER JOIN 
       list_photos_uploaded_by_members ph 
     ON 
       u.id = ph.userId 

      WHERE 
       u.live = 1 AND u.membershipType = 1 AND u.city = London 
      GROUP BY 
       u.id 
       ORDER BY 
+0

что это содержит $ params ['SearchBy']? –

+0

Этот вопрос не содержит двух самых полезных вещей. 1) какова ваша строка $ sql перед ее выполнением (т. Е. Распечатать ее) и 2) полный текст ошибки. Тем не менее, прямо сейчас у вас нет пробела между 'u.live = 1' и' AND' –

+0

эй pala. извините, в самом запросе, было место. также. его должно быть $ params ['Searchby'] –

ответ

0

Нулевое решение будет

$this->searchBy[$topkey][] = $key.' = "'. $val .'"'; 

Этот подход, особенно если они доступны общественности, позволяя конечному пользователю писать/входные значения, может быть одной из основных угроз безопасности и вы должныescape the input values или использование PDO (еще лучше).

+0

спасибо Sitilge за вашу помощь –

+0

@PaulKendal приятно слышать, что, как я уже сказал, попробуйте использовать pdo. Могли бы сэкономить вам несколько неприятных моментов. :) – sitilge

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