Запрос возвращает 0 результатов в php, но в oracle SQL developer он возвращает 52 результата.

1

У меня проблема с моим запросом оракула. Когда я запускаю его в 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

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

  • 1
    Я переместил ответ на добавление к его собственному посту с ответами, чтобы вопросы и ответы были хорошо разделены (полезно главным образом для извлечения данных и пользователей API).
Теги:

3 ответа

2
Лучший ответ

Здесь есть две проблемы:

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}%", );
  • 0
    Это сработало для меня! Спасибо за ваш быстрый и хороший ответ!
  • 1
    Никаких проб @McBurgerKong, рад, что все заработало!
Показать ещё 4 комментария
0

(Отправлено от имени ОП).

Благодаря halfer ответ, я смог решить проблему. Исправление:

$query_01 = "SELECT name , zipcity FROM  import_persons WHERE upper(name) LIKE :zoekwaarde AND status < 3 ORDER BY name";
$parameters = array(':zoekwaarde' => "%{$zoekwaarde}%", );
  • 0
    OP, если вы хотите добавить свой собственный ответ (чтобы вы могли получить за него голоса «за»), дайте мне знать, чтобы я мог удалить этот. Спасибо!
0

я не знаю PHP, так что это немного догадка, но мне интересно,

LIKE '%:zoekwaarde%' 

принимает имя переменной как литеральную строку, и вам много лучше с чем-то вроде

LIKE '%' || :zoekwaarde || '%'
  • 0
    Спасибо за ваш быстрый ответ, я попробовал это и до сих пор не получил результатов в PHP. SQLDeveloper все еще дает результаты, даже если вы предложили правку
  • 0
    Мое единственное другое предложение - жестко кодировать значения в вашем PHP-коде, чтобы доказать, что это проблема с переменными. Но так как я не знаю PHP, мне придется смириться с этим, удачи в поиске решения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню