加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

在SQL查询中转义单引号

发布时间:2020-12-12 16:33:27 所属栏目:MsSql教程 来源:网络整理
导读:我有一个表公司,它有两列名称和地址.通过运行以下代码,将新数据插入到表中: my_name = "my company name"my_address = "ABC"query = "INSERT INTO companies (name,address) VALUES ('#{my_name}','#{my_address}');"ActiveRecord::Base.connection.execute(
我有一个表公司,它有两列名称和地址.通过运行以下代码,将新数据插入到表中:
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使用反引号.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读