PostgreSql + Проблема с поиском «» в строке

0

Здесь у меня проблема с поиском записи в Postgresql DB в приложении RoR. Имя таблицы:: address_books, имя атрибутов:: organization_name, federal_tax_id, city, zip, business_name. В поиске название организации содержит: Claire Inc как запись. Во время поиска он не отображает данные, а мы выбираем Claire Inc в окне поиска. Поскольку "'" разбивает строку и не дает результата. Поэтому я использовал "?" замените "" во время поиска в mysql, и он работает. Но я получаю соответствующее преобразование для поиска этих слов.

Query :: SELECT * FROM "address_books" 
WHERE ( address_books.organization_name = 'Claire?s Inc' 
and address_books.federal_tax_id = '59-0940416' 
and address_books.city = 'Hoffman Estates' 
and address_books.zip = '60192' and address_books.business_name ='' ) 
ORDER BY address_books.organization_name , city LIMIT 100

Просьба предложить любой другой способ сделать успешный поиск.

Спасибо в Advance

Теги:
database

2 ответа

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

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

Один из способов - отбросить его до 'Claire' Inc'. Другая - использовать библиотеку, которая позволяет передавать параметры и обрабатывать экранирование для вас. Другой заключается в том, чтобы ввести строку как $$Claire Inc$$, хотя этот синтаксис допускает другие вещи, которые могут быть неприемлемыми здесь.

  • 0
    Извините, я не понимаю вас. Пожалуйста, объясните это вкратце. Спасибо
  • 0
    Я говорю, остановитесь на самой идее замены ' другим персонажем и просто вставьте ' туда, куда он должен идти. Синтаксис позволяет вам уйти ' чтобы не разрывать строки.
Показать ещё 2 комментария
0

Я думаю, вы можете использовать переменную параметра RoR, иначе RoR избежит ваших опасных строк для вас. что-то вроде:

AddressBook.find(:all, :conditions => { "organization_name => ?", "Claire Inc" }) 

или

AddressBook.find(:all, :conditions => { :organization_name => "Claire Inc" })
  • 0
    Да, мне нужен метод предотвращения инъекций sql, но вы должны использовать параметры здесь.
  • 0
    Ну, на самом деле я здесь использую params. ROR имеет несколько способов определения параметров для запросов 1) с помощью вопросительного знака 2) с помощью: символов. Вы можете посмотреть здесь api.rubyonrails.org/classes/ActiveRecord/Base.html

Ещё вопросы

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