在SQL查询中转义单引号

我有一个表companies ,它有两列名为nameaddress 。 通过运行以下代码,新数据将插入到表中:

 my_name = "my company name" my_address = "ABC" query = "INSERT INTO companies (name,address) VALUES ('#{my_name}','#{my_address}');" ActiveRecord::Base.connection.execute(query); 

如果我将my_name值从"my company name"更改为"John's company" ,我将收到语法错误。 这是因为查询变为:

 "INSERT INTO companies (name,address) VALUES ('John's company','ABC');" 

'John's company'有一个引号。

鉴于我已经为查询字符串定义使用了双引号,我怎样才能摆脱关于我的值中单引号的错误?

如果必须这样做,那么在连接对象上使用quote方法 :

quote (value,column = nil)
引用列值以帮助防止SQL注入攻击。

所以这样的事情:

 my_name = ActiveRecord::Base.connection.quote("John O'Neil") my_address = ActiveRecord::Base.connection.quote("R'lyeh") query = "INSERT INTO companies (name,address) VALUES (#{my_name}, #{my_address})" ActiveRecord::Base.connection.execute(query); 

永远不要尝试处理自己的报价。 并且不要尝试使用双引号来引用SQL字符串文字,这就是单引号的用途; 双引号用于在大多数数据库中引用标识符(例如表名和列名),但MySQL使用反引号。