mysql - Rails 3 connection.execute IN语句参数数组语法

标签 mysql ruby-on-rails ruby-on-rails-3 prepared-statement

我有一个关于 Rails 3 ActiveRecord::Base.connection.execute 方法和我想使用它的参数的语法问题。我已经为此奋斗了几个小时,但似乎在互联网上找不到这个特定问题的任何答案。

数据库是MySQL。

我需要通过带有 IN 条件语句的 SELECT 创建一个临时表,其中 IN 应该检查的值列表是一个参数 - rails 数组。代码如下所示:

arr = [1,2,3]
ActiveRecord::Base.connection.execute("CREATE TEMPORARY TABLE things SELECT * FROM objects WHERE objects.id IN #{arr}") 

我收到 MySQL 语法错误!

ActiveRecord::Base.connection.execute("CREATE TEMPORARY TABLE things SELECT * FROM objects WHERE objects.id IN #{(arr)}") 

再次出现 MySQL 语法错误!

ActiveRecord::Base.connection.execute("CREATE TEMPORARY TABLE things SELECT * FROM objects WHERE objects.id IN (#{arr})") 

MySQL语法错误

以上尝试对应这个问答: How to execute arbitrary parameterized SQL in rails

我什至尝试像find_by_sql那样使用,但仍然报错:

ActiveRecord::Base.connection.execute(["CREATE TEMPORARY TABLE things SELECT * FROM objects WHERE objects.id IN (:ids)",{:ids => arr }]) - obviously, I get an MySQL error. 

我是否遗漏了一些明显的东西?请帮忙!我正是以这种方式需要这个(例如,创建具有完全这样的条件的临时表),否则基于这个的更复杂的查询将不起作用。谢谢!

最佳答案

这是另一个使用 Rails 查询清理的选项

arr = [1,2,3]
query = "SELECT * FROM objects where id IN (?)"
query = ActiveRecord::Base.send :sanitize_sql_array, [query, arr]
ActiveRecord::Base.connection.execute(query)

关于mysql - Rails 3 connection.execute IN语句参数数组语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12217069/

相关文章:

php - MySQL:从与ID匹配的其他表中获取数据

mysql - GitHub 操作 : How to run `services` on Windows or macOS?

ruby-on-rails - i18n 和日期::ABBR_DAYNAMES

ruby-on-rails-3 - 如何在提交表单的页面上呈现验证错误?

ruby-on-rails - 如何在主应用程序中合并 Rails Engine ApplicationController 方法?

mysql - 数据库结构、存储和组织数据

php - 时间轴上同一日期的 2 个元素

ruby-on-rails - 确保 ElasticSearch 与数据库同步

ruby-on-rails - 生产中测量员的 CSS 或布局问题

sql - Rails3中如何在没有模型的情况下从数据库中查询?