Ruby SQL插入使用Mysql2 gem

时间:2013-04-09 13:02:18

标签: mysql ruby-on-rails ruby-on-rails-3 mysql2

我正在尝试插入远程mysql数据库。我能够正确连接,并可以查询“选择”没有问题。但是,我无法在我可以选择的同一个表中执行插入操作。我怀疑它与我的绑定有关,但这几乎与我使用的sqlite3工作相同,我认为使用相同的Arel插入。

@result = @db.query("insert into lead_to_processes (case_number, style_of_case) values (?,?)", [
      self.case_number.to_blob.force_encoding("UTF-8"),
      self.style_of_case.to_blob.force_encoding("UTF-8")
    ]
)

最终目标是能够从模型内部查询远程数据库并将数据插入其中。我尝试过使用Octopus,但由于表格与数据库不同,因此效果不佳。

我对此用户拥有数据库的完全权限。

因此,根据评论的指导,我更改了语法并得到了不同的错误

Mysql2 ::错误:您的SQL语法中有错误;

但是我现在正在做这样的查询

@db = Mysql2::Client.new(connectionstring)

 @case_number            =  @db.escape(self.case_number)
 @style_of_case          =  @db.escape(self.style_of_case)

@db.query("insert into lead_to_processes (case_number, style_of_case) VALUES
(#{@case_number}, #{@style_of_case})

任何想法或指导?我也尝试过''封装我正在插入的变量

2 个答案:

答案 0 :(得分:1)

我想我的代码中有一些奇怪的字符,所以我不得不强制使用UTF-8编码,然后使用下面的gsub删除字符,现在一切都在流动。

感谢您的建议

@db.escape(self.style_of_case.force_encoding("UTF-8"))
@db.escape(self.case_number.gsub(/[\xC2]/,'').gsub(/[\xA0]/,'').force_encoding("UTF-8"))

答案 1 :(得分:0)

您是否可能错过了最终报价?

@db.query("insert into lead_to_processes (case_number, style_of_case) VALUES
(#{@case_number}, #{@style_of_case})

应该是

@db.query("insert into lead_to_processes (case_number, style_of_case) VALUES
(#{@case_number}, #{@style_of_case}") <== notice the quote at the end.