2

我正在尝试插入远程 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::Error: 你的 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})

有什么想法或指导吗?我也试过用 '' 封装我要插入的变量

4

2 回答 2

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"))
于 2013-04-09T19:49:52.280 回答
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.
于 2013-04-09T19:45:39.620 回答