我使用 MySQL DB 和 MySQL2 作为适配器。
我想在 Rails 中执行自定义 sql 语句。
我需要一种允许像 PHP 一样准备 sql 语句的方法,如下所示:
stmt = prepare("INSERT INTO tab (col1, col2) VALUES (?, ?)", ["foo", "bar"])
不过,我发现 ActiveRecord 和 MySQL2 都没有这样的方法。
但我发现ActiveRecord::ConnectionAdapters::AbstractAdapterexec_*
中有几种方法,我认为它们完全适合我的任务但不知道如何使用它们,他们的 API 文档信息很少:
exec_insert(sql,名称,绑定)
使用绑定作为绑定替代,在此连接的上下文中执行插入 sql 语句。name 是与执行的 sql 语句一起记录的。
我已经厌倦了这个
sql = "INSERT INTO tab (col1, col2) VALUES (?, ?)"
r = ActiveRecord::Base.connection().exec_insert(sql, "someName", [10, "foo"])
puts r
但出现错误:
`query': Mysql2::Error: You have an error in your SQL syntax; check the manual
that corresponds to your MySQL server version for the right syntax to use near '?, ?)'
那么如何使用这些方法呢?什么是name
属性?什么是bind
参数类型?如何编写 sql 语句,用什么代替?
?
升级版:
我已经编写prepare
了在 Rails 中使用的方法。见 github。