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, name, binds)
バインドの代替としてバインドを使用して、この接続のコンテキストで insert 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-statement の書き方、代わりに何を入れ?
ますか?
更新:
prepare
Railsで使用するメソッドを書きました。github で参照してください。