【问题标题】:Searching for partial strings in Ecto using ilike使用 ilike 在 Ecto 中搜索部分字符串
【发布时间】:2016-07-21 17:32:05
【问题描述】:

我正在尝试在数据库中搜索以查看一个字符串是否与数据库中另一个字符串的一部分匹配。如果两者使用ilike 精确,我可以让它匹配,但是当我只搜索字符串的一部分时,它不会捕获包含它的数据。这是我的查询代码:

    servicesstate = Repo.all(from p in Callme.Service, where: ilike(p.locations, ^zip.state))

当值准确时它会匹配(“南卡罗来纳州”、“南卡罗来纳州”),但我希望它在类似于(“位于南卡罗来纳州”、“南卡罗来纳州”)的情况下匹配

谢谢

【问题讨论】:

    标签: elixir phoenix-framework ecto


    【解决方案1】:

    您可以对 LIKE/ILIKE 使用 % 语法:

    servicesstate = Repo.all(from p in Callme.Service, where: ilike(p.locations, ^"%#{zip.state}%"))
    

    请注意,如果zip.state 包含%,这将无法正常工作。如果它可以包含%,则必须将Ecto.Query.API.fragment/1this 之类的查询一起使用。

    【讨论】:

    • 表达赞赏的最佳方法是投票并检查此答案作为您问题的解决方案。
    • ilike(p.locations, ^"%#{user_input}%") 是否允许 SQL 注入?
    • @NathanLong 不。刚刚回答了与此相关的最新问题:)
    • 没关系,这是@Dogbert 的回答:stackoverflow.com/a/41021806/281199
    • 请注意,尽管注入 SQL 语句 是不可能的,但 LIKE 注入仍然是可能的(如 Ecto 中所述:hexdocs.pm/ecto/Ecto.Query.API.html#like/2),这会显着减慢查询速度。这需要某种形式的用户输入清理。
    猜你喜欢
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    相关资源
    最近更新 更多