PostgreSql + Проблема с поиском «» в строке - PullRequest
0 голосов
/ 04 октября 2010

Здесь у меня проблема с поиском записи в базе данных Postgresql в приложении RoR. Имя таблицы :: адресная книга, имя атрибута :: имя_организации, федеральный_дакс_ид, город, почтовый индекс, имя_бизнеса. В поиске название организации содержит :: Claire's Inc в качестве записи. Во время поиска он не показывает данные, пока мы выбираем Claire's 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

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

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 04 октября 2010

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

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

или

AddressBook.find(:all, :conditions => { :organization_name => "Claire's Inc" })
0 голосов
/ 04 октября 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...