У меня проблема с 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
Вы написали 'ILIKE'. Я думаю, что это также называется 'LIKE' в PSQL. – sascha
@ Sn0opy - 'ILIKE' - это нечувствительная к регистру версия. –