[英]Escaping ' in Ruby string, without escaping \ for inserting to MySQL
我在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}"}
再次以不同數量的\\
"Henry's string".gsub(/'/) {|x| "\\\\#{x}"}.gsub(/\\\\/) {|x| "#{x}"}
我想我需要一個奇數\\
來完全轉義'(以便加載到MySQL),但是我不知道如何獲得它。
當插入數據庫(如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之類的東西來進一步簡化事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.