在SQL查询中转义单引号

前端之家收集整理的这篇文章主要介绍了在SQL查询中转义单引号前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个表公司,它有两列名称和地址.通过运行以下代码,将新数据插入到表中:
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值从“我的公司名称”更改为“John’s company”,我将收到语法错误.这是因为查询变成:

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

和“约翰公司”内有单引号.

鉴于我已经对查询字符串定义使用了双引号,我怎么能摆脱我的价值单引号的这个错误呢?

解决方法

如果你必须这样做,那么在连接对象上使用 quote method

quote(value,column = nil)
Quotes the column value to help prevent sql injection attacks.

所以这样的事情

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使用反引号.

猜你在找的MsSQL相关文章