2013-04-02 4 views
1

У меня проблема с F3 Framework.Free Fat Framework a Select with ILIKE Postgresql Statement

Я пытаюсь найти текст, который был введен пользователем.

Вот какое-то заявление:

$db->exec(array("Select userid,username,section from user 
      WHERE section=:sectionId 
      AND username ILIKE '%?%'"), 
      array(':sectionId' => $sectionId), 
      array(1=> $queryString), 
      NULL)); 

Если есть опечатка извините, но я не разрешается размещать код из производственной системы.

Этот оператор возвращает пустой массив.

Я заменил переменные на строки и протестировал их с помощью psql, но он возвращает одно совпадение.

У кого-то есть идея?

Edit:

Ответ От Sn0opy:

$db->exec(array("Select userid,username,section from user 
      WHERE section=:sectionId 
      AND username ILIKE '%?%'"), 
      array(':sectionId' => $sectionId, 1 => $queryString)); 

Проблема в том, в Postgresql она составляет $ 1, $ 2, $ 3, а не "? ,

мое решение (еще раз спасибо Sn0opy за его ответ):

Вы должны Concat Строка

('%'|| :queryString || '%') 

Это работает сейчас:

$db->exec(array("Select userid,username,section from user 
      WHERE section=:sectionId 
      AND username ILIKE ('%'|| :queryString || '%')), 
      array(':sectionId' => $sectionId, ':queryString' => $queryString)); 

Если вы не concat the String, вы получите эту ошибку:

ERROR: could not determine data type of parameter $1 
+0

Вы написали 'ILIKE'. Я думаю, что это также называется 'LIKE' в PSQL. – sascha

+3

@ Sn0opy - 'ILIKE' - это нечувствительная к регистру версия. –

ответ

2

У вас есть этот код с the docs. Если вы проверите документы, вы увидите, что первый массив имеет три элемента. Так же и второе. В вашем случае у вас есть один элемент в первом и 3 в последнем. Будет применен только первый параметр array(':sectionId' => $sectionId).

Это один должен работать:

 $db->exec(array("Select userid,username,section from user 
       WHERE section=:sectionId 
       AND username ILIKE '%?%'"), 
       array(':sectionId' => $sectionId, 1 => $queryString)); 
+0

Thx для вашего ответа, в этом источнике была небольшая ошибка, но это зависит только от Postgresql, я отредактировал ее в своем Mainpost. – demonking