我正在尝试对MySQL和PostgreSQL使用准备语句查询
以下代码适用于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 服务器版本对应的手册,了解在"?"附近使用的正确语法。其中 id = (?)' 在第 1 行:"更新存储 SET 键 = (?)其中 id = (?)'
宝石版本:
gem 'mysql2', '0.4.5'
gem 'pg', '0.18.2'
gem 'rails', '5.1.4'
如何使用适用于MySQL和PostgreSQL和ActiveRecord的prepare语句?
我认为你应该这样尝试
exec_query('your query', name = 'SQL', binds = [[nil, 'x'], [nil, 1]])
对于MySQL,您可以使用raw_connection来准备语句,然后执行语句:
st = ActiveRecord::Base.connection.raw_connection.prepare(
'UPDATE users SET slug = ? WHERE id = ?'
)
st.execute(username.parameterize, id)
st.close