如何在mysql和postgresql中使用exec\u query或exec\u update

kgsdhlau  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(325)

我正在尝试为mysql和postgresql使用prepare语句查询
以下代码适用于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行的“?)where id=(?)”附近使用正确的语法:“update stores set key=(?)where id=(?)”
gem版本:

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

如何使用prepare语句,它将同时适用于mysql和postgresql以及activerecord?

3zwjbxry

3zwjbxry1#

我想你应该这样试试

exec_query('your query', name = 'SQL', binds = [[nil, 'x'], [nil, 1]])
8yoxcaq7

8yoxcaq72#

我仍然在想,是否有一种方法可以像postgres适配器那样简单。同时你可以先 prepare 然后 execute :

statement = ActiveRecord::Base.connection.raw_connection.prepare('SELECT ? AS foo;')

# => #<Mysql2::Statement:0x0000000920bf80>

statement.execute(1).to_a

# => [[1]]

相关问题