在ruby字符串中转义',而不转义\以插入mysql

3ks5zfa0  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(598)

我在ruby中有一个字符串的形式是: "Henry's string"gsub 以及 tr 我试过给我这样的表格 "Henry\\'s string" , "Henry\\\\'s string" 等等。
这些都是逃避反斜杠,但留给我一个无法逃避的单引号。
我试过: "Henry's string".gsub("'","\\\\'") 不同数量的\ "Henry's string".gsub(/'/) {|x| "\\\\#{x}"} 又是不同数量的\ "Henry's string".gsub(/'/) {|x| "\\#{x}"}.gsub(/\\/) {|x| "#{x}"} 我想我需要一个奇数 \ 完全逃逸'(为了加载到mysql),但我不知道如何得到这个。

yqhsw0fo

yqhsw0fo1#

当插入到数据库(如mysql)中时,使用带有占位符值的准备语句非常重要。我把它用粗体写出来是因为理解它特别重要。只需要一个小小的失误,你就创建了一个任何人都可以利用的sql注入漏洞,这些漏洞会造成极大的破坏。
转义字符串表面上看起来很简单,但事实并非如此。有很多奇怪的边缘案件,你需要掩盖,其中的细节太复杂,在这里提到一个简短的答案。
简单的解决方案是根本不需要转义,而是编写以下形式的查询:

INSERT INTO table_name (column_name) VALUES (?)

在哪里 ? 表示要插入的数据。您可以使用这些,例如 mysql2 像这样的司机:

stmt = @client.prepare("INSERT INTO table_name (column_name) VALUES (?)")
stmt.execute("Henry's string")

驱动程序将负责正确编码值,这样您就不必担心它了。
您还可以使用sequel或activerecord之类的工具来进一步简化事情。

相关问题