gpt4 book ai didi

mysql - 在 Rails 中的参数化 SQL 查询中转义 ':' 和 '?'

转载 作者:行者123 更新时间:2023-11-29 02:55:36 24 4
gpt4 key购买 nike

我想知道如何在一般的 SQL 查询中转义 ?:

这些只是随意的例子:

Post.find_by_sql ["SELECT title, author, content FROM post where author = ? AND RIGHT(content, 1) = '?'", @author]

(查找以 ? 结尾的帖子)

Post.find_by_sql ["SELECT title, author, content FROM post where author = :author AND title LIKE 'Foo:bar%'", {author:@author}]

(查找以 foo:bar 开头的帖子)

我不是在问如何转义以防止注入(inject)。我问的是当我使用参数化查询时,rails 会将 ?:some_var 作为参数。但是,如果我想使用 ?:stuff 作为查询的一部分怎么办?我如何转义它们以便 Rails 将它们视为字符串而不是试图找到匹配的参数?

我知道一个解决方案是像这样编写这两个查询:

Post.find_by_sql ["SELECT title, author, content FROM post where author = ? AND RIGHT(content, 1) = ?", @author, '?']

Post.find_by_sql ["SELECT title, author, content FROM post where author = :author AND title LIKE CONCAT(:name, '%')", {author:@author, name:'foo:bar'}]

但是有没有更优雅的方式呢?

最佳答案

参见quote 方法:http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/Quoting.html#method-i-quote

我知道你说的是“一般”,但上面的两个查询可以使用 ActiveRecord 编写,这样你就可以避免自己引用东西。

关于mysql - 在 Rails 中的参数化 SQL 查询中转义 ':' 和 '?',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30945632/

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