Lee*_*fin 17 sql escaping ruby-on-rails
我有一个表companies,有两列名为name和address.通过运行以下代码,新数据将插入到表中:
my_name = "my company name"
my_address = "ABC"
query = "INSERT INTO companies (name,address) VALUES ('#{my_name}','#{my_address}');"
ActiveRecord::Base.connection.execute(query);
Run Code Online (Sandbox Code Playgroud)
如果我将my_name值更改"my company name"为"John's company",我将收到语法错误.这是因为查询变为:
"INSERT INTO companies (name,address) VALUES ('John's company','ABC');"
Run Code Online (Sandbox Code Playgroud)
并且在其中'John's company'有一个引号.
鉴于我已经为查询字符串定义使用了双引号,我怎样才能摆脱关于我的值中单引号的错误?
mu *_*ort 70
如果必须这样做,那么在连接对象上使用该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);
Run Code Online (Sandbox Code Playgroud)
永远不要尝试处理自己的报价.并且不要尝试使用双引号来引用SQL字符串文字,这就是单引号的用途; 双引号用于在大多数数据库中引用标识符(例如表名和列名),但MySQL使用反引号.
| 归档时间: |
|
| 查看次数: |
30271 次 |
| 最近记录: |