PostgreSql +搜索字符串中出现的“'”问题

时间:2010-10-04 10:51:27

标签: ruby-on-rails database postgresql mysql

在这里,我在RoR应用程序中搜索Postgresql DB中的记录时遇到问题。 table :: address_books的名称,属性名称:: organization_name,federal_tax_id,city,zip,business_name。在搜索中,组织名称包含:: 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 :(得分:0)

您正在搞乱数据以处理查询语法问题。将一个正确转义的撇号放在撇号所在的位置。

一种方法是将其转义为'Claire''s Inc'。另一种方法是使用一个库,它允许您传递参数并为您处理转义。另一种方法是将字符串输入为$$Claire's Inc$$,尽管该语法允许其他可能不合适的内容。

答案 1 :(得分:0)

我认为你可以使用RoR参数替换,而不是RoR会为你逃避危险的字符串。类似的东西:

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

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