【问题标题】:Ruby SQL Insert using Mysql2 gem使用 Mysql2 gem 的 Ruby SQL 插入
【发布时间】:2013-03-31 22:14:56
【问题描述】:

我正在尝试插入远程 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,但效果不佳,因为表与数据库不同。

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

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

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})

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

【问题讨论】:

  • 您有任何错误吗?你能把它们贴出来吗?你有那个数据库的写权限吗?还是只读?
  • 我不相信 mysql2 gem 为查询提供绑定,您必须自己创建有效的 SQL 才能传递给查询。 github.com/brianmario/mysql2
  • 你能粘贴抛出的异常吗?
  • TypeError: can't convert Array into Hash
  • 你不需要[] 摆脱它们

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


【解决方案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"))

【讨论】:

    【解决方案2】:

    您是否可能缺少结束引号?

    这个

    @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.
    

    【讨论】:

    • 感谢您的回复,在您发布此内容时发布了答案,数据中存在导致错误的垃圾字符。感谢@Karl的帮助
    猜你喜欢
    • 1970-01-01
    • 2014-03-23
    • 2013-09-27
    • 2020-10-12
    • 2011-05-06
    • 2011-04-09
    • 1970-01-01
    相关资源
    最近更新 更多