gpt4 book ai didi

mysql - 在 Rails 中以安全的方式使用子字符串查询

转载 作者:太空宇宙 更新时间:2023-11-03 16:48:08 24 4
gpt4 key购买 nike

我目前正在编写查询以在表中查找一些分组结果,以便构建按字母顺序排列的分页索引。

我的查询类似于以下内容(基于此 answer ):

criteria = "substr(%s, 1, 1)" % field_name
Posts.select(criteria).group(criteria).order(criteria).count(:id)

现在我想改进这个查询以避免任何 SQL 注入(inject),但我真的找不到清理它的方法。

据我所知,没有办法对这个特定查询使用 LIKE - 或者至少我还没有找到它 - 并使用 where 子句。

现在示例使用的是 Posts 实体,但在生产中它将与多种对象一起使用,我希望有一个通用系统来动态指定字段名称。

我唯一的想法是在继续之前获取表列名称并根据该列表验证字段,尽管这在生产场景中可能有点过分。

我的环境是 Ruby 1.9.3、Rails 3.2.17 和 MySQL 数据库。

更新 1

我会更好地定义上下文:在上面的查询中,我使用的是 Post,但我真正拥有的是一个 ActiveRecord 查询,我在其中附加了 selectgroup 标准。

类似于:

query = Post.where(:condition => something)
# .. do more stuff here

criteria = "substr(%s, 1, 1)" % field_name
query.select(criteria).group(criteria).order(criteria).count(:id)

最佳答案

使用 Post.attribute_names 获取 Post 模型的列,然后检查列是否包含您的 field_name,如果不包含则引发错误。

关于mysql - 在 Rails 中以安全的方式使用子字符串查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28894121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com