У меня проблема с моим запросом оракула. Когда я запускаю его в PHP, он возвращает 0 результатов. Если я запускаю тот же запрос в Oracle SQLDeveloper, он возвращает 52 результата.
Это запрос в PHP:
SELECT name , zipcity FROM import_persons WHERE upper(:zoekop) LIKE '%:zoekwaarde%' AND status < 3 ORDER BY name
$parameters = array(':zoekop' => $zoekop, ':zoekwaarde' => $zoekwaarde);
Запрос, который я запускаю в SQLDeveloper, с переменными, заполненными вручную. (Скопировал их из эха в PHP).
SELECT name , zipcity FROM import_persons WHERE upper(name) LIKE '%Q%' AND status < 3 ORDER BY name
Кажется, я не могу найти ошибку, прежде чем спросить, я попытался связать параметры, но это не сработало.
Здесь есть две проблемы:
SELECT name , zipcity FROM import_persons
WHERE UPPER(:zoekop) LIKE '%:zoekwaarde%' AND status < 3
ORDER BY name
Хорошо, что вы используете связанные параметры, но, к сожалению, только значения могут быть связаны; поскольку :zoekop
является заполнителем столбца, вам придется использовать традиционную конкатенацию строк (и если имя столбца поступает от ввода пользователя, используйте белый список для обеспечения безопасности).
Вы можете привязать для :zoekwaarde
, но подстановочные знаки должны быть частью строки, которую вы связываете, а не в запросе. Поэтому ваш SQL выглядит примерно так:
SELECT name , zipcity FROM import_persons
WHERE UPPER(zoekop_col) LIKE :zoekwaarde AND status < 3
ORDER BY name
Обратите внимание, что запрос не включает кавычки - они не требуются, так как система привязки знает тип параметра, который вы связываете в этой позиции. Обертывая все это, теперь у вас есть только один параметр для привязки:
$parameters = array(':zoekwaarde' => "%{$zoekwaarde}%", );
(Отправлено от имени ОП).
Благодаря halfer ответ, я смог решить проблему. Исправление:
$query_01 = "SELECT name , zipcity FROM import_persons WHERE upper(name) LIKE :zoekwaarde AND status < 3 ORDER BY name";
$parameters = array(':zoekwaarde' => "%{$zoekwaarde}%", );
я не знаю PHP, так что это немного догадка, но мне интересно,
LIKE '%:zoekwaarde%'
принимает имя переменной как литеральную строку, и вам много лучше с чем-то вроде
LIKE '%' || :zoekwaarde || '%'