如何在MySQL和PostgreSQL中使用exec_查询或exec_更新

如何在MySQL和PostgreSQL中使用exec_查询或exec_更新,mysql,ruby-on-rails,postgresql,activerecord,Mysql,Ruby On Rails,Postgresql,Activerecord,我正在尝试为MySQL和PostgreSQL使用prepare语句查询 connection = ActiveRecord::Base.connection query = 'UPDATE stores SET key = $1 WHERE id = $2' connection.exec_query(query, "SQL", [[nil, 'x'], [nil, 1]]) 以下代码适用于PostgreSQL connection = ActiveRecord::Base.connecti

我正在尝试为MySQL和PostgreSQL使用prepare语句查询

connection = ActiveRecord::Base.connection
query = 'UPDATE stores SET key = $1 WHERE id = $2'
connection.exec_query(query, "SQL", [[nil, 'x'], [nil, 1]]) 
以下代码适用于PostgreSQL

connection = ActiveRecord::Base.connection
query = 'UPDATE stores SET key = $1 WHERE id = $2'
connection.exec_query(query, "SQL", [[nil, 'x'], [nil, 1]]) 
但是当我将数据库和查询切换到以下位置时

query = 'UPDATE stores SET key = (?) WHERE id = (?)'
connection.exec_query(query, "SQL", [[nil, 'x'], [nil, 1]])
获取以下错误

ActiveRecord::StatementInvalid:Mysql2::Error:您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解在第1行“UPDATE stores SET key=(?)WHERE id=(?)”附近使用的正确语法:“UPDATE stores SET key=(?)WHERE id=(?)”

创业板版本:

gem 'mysql2', '0.4.5'
gem 'pg', '0.18.2'
gem 'rails', '5.1.4'

我如何使用prepare语句,它将在ActiveRecord中同时适用于MySQL和PostgreSQL?

我认为您应该这样尝试

exec_query('your query', name = 'SQL', binds = [[nil, 'x'], [nil, 1]])
对于MySQL,您可以使用准备语句,然后执行语句:

st = ActiveRecord::Base.connection.raw_connection.prepare(
       'UPDATE users SET slug = ? WHERE id = ?'
     )
st.execute(username.parameterize, id)
st.close

为什么update语句上有括号?
updatestores是否设置了key=?其中id=?
工作?