【问题标题】:PostgreSql + Searching Issue for "'" present in stringPostgreSql + 搜索字符串中存在“'”的问题
【发布时间】:2010-10-04 10:51:26
【问题描述】:

在这里,我在 RoR 应用程序的 Postgresql DB 中搜索记录时遇到问题。表名称 :: address_books,属性名称 :: organization_name,federation_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

请提出任何其他成功搜索的方法。

提前致谢

【问题讨论】:

    标签: ruby-on-rails database postgresql mysql


    【解决方案1】:

    您正在弄乱您的数据来处理查询语法问题。将一个正确转义的撇号放在撇号应该在的位置。

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

    【讨论】:

    • 对不起,我没听明白。请简要说明。谢谢
    • 我是说,停止用另一个字符替换' 的整个想法,只需将' 放在它应该去的地方。该语法允许您转义 ',因此它不会破坏字符串。
    • 阅读postgresql.org/docs/8.4/static/…,因为您确实需要在这里了解其他变体。
    【解决方案2】:

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

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

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

    【讨论】:

    • 是的,我需要防止 sql 注入的方法,但你的直接价值实际上你必须在这里使用参数。
    • 好吧,我实际上在这里使用参数。 ROR 有几种方法来定义查询的参数 1)通过问号 2)通过 :symbols。你可以看这里api.rubyonrails.org/classes/ActiveRecord/Base.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    • 2022-11-18
    • 2013-04-08
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多