在Ruby字符串中转义',而不是为了插入MySQL而转义\

Kat*_*ine 0 ruby mysql escaping gsub single-quotes

我有一个Ruby形式的字符串: "Henry's string"

每一个gsubtr我试着让我形成像"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),但我无法弄清楚如何得到这个.

tad*_*man 6

当插入数据库(如MySQL)时,使用带有占位符值的预准备语句非常重要.我把它放在粗体,因为理解它是非常重要的.所需要的只是一个小小的滑动,你已经创建了一个任何人都可以利用的SQL注入漏洞,这些漏洞可能非常具有破坏性.

转义字符串可能看起来很简单,但事实并非如此.有很多古怪的边缘情况你需要掩盖,其中的细节太复杂,不能在这里简短的回答.

简单的解决方案是根本不打扰转义,而是写下这种形式的查询:

INSERT INTO table_name (column_name) VALUES (?)
Run Code Online (Sandbox Code Playgroud)

其中?代表您要插入的数据.你可以使用这些,例如,像这样的mysql2驱动程序:

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

该驱动程序将负责正确编码值,因此您不必担心它.

您还可以使用SequelActiveRecord之类的东西来进一步简化操作.