Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Rails 3 connection.execute IN语句参数数组语法_Mysql_Ruby On Rails_Ruby On Rails 3_Sql Parametrized Query - Fatal编程技术网

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

Mysql Rails 3 connection.execute IN语句参数数组语法,mysql,ruby-on-rails,ruby-on-rails-3,sql-parametrized-query,Mysql,Ruby On Rails,Ruby On Rails 3,Sql Parametrized Query,我有一个关于Rails 3 ActiveRecord::Base.connection.execute方法和参数的语法问题,我想使用它。我已经为此争论了几个小时,只是在互联网上似乎找不到这个具体问题的任何答案 数据库是MySQL 我需要通过SELECT with IN condition语句创建一个临时表,其中IN应该检查的值列表是一个参数-rails数组。代码如下所示: arr = [1,2,3] ActiveRecord::Base.connection.execute("CREATE TE

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

数据库是MySQL

我需要通过SELECT with IN condition语句创建一个临时表,其中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)}") 
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)}") 
ActiveRecord::Base.connection.execute("CREATE TEMPORARY TABLE things SELECT * FROM objects WHERE objects.id IN (#{arr})") 
MySQL语法错误

上述尝试对应于此问题的答案:

我甚至尝试以类似于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. 

我错过了什么明显的东西吗?请帮忙!我正是以这种方式需要它(例如,创建具有这种条件的临时表),否则基于此条件的更复杂查询将无法工作。谢谢

如果将
arr.to_s
转换为
“[1,2,3]”

我认为
arr.join(',')
应该可以工作

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

下面是另一个使用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)