[英]Write to a file mysql commands with ruby
我正在使用在文件中寫入sql命令的程序。
該程序是紅寶石。 我發現它不能正確地轉義特殊字符。
我發現了可以轉義的功能,但它並不完全正確。
def escape_for_sql(s)
s=s.to_s
if s.nil?
"''"
else
"'"+ s.gsub("'","\'")+"'"
end
end
以前從未使用過紅寶石,因此有人可以為我提供正確的功能,甚至更好地告訴我是否有任何內置方法嗎?
PS我不能安裝任何外部模塊
假設您只希望此方法將字符串s
出現的'
轉換為\\'
,這應該可以工作:
def escape_for_sql(s)
s=s.to_s
if s.nil?
"''"
else
"'" + s.gsub("'") { %q{\'} } + "'"
end
end
puts escape_for_sql "hello, this 'is' a string"
# => 'hello, this \'is\' a string'
在原始方法中,替換項用雙引號引起來,因此不會插入反斜杠。
編輯
注意:要替換所有MySQL特殊字符,請執行以下操作。 我只包含了幾個MySQL特殊字符-有關完整列表,請訪問http://dev.mysql.com/doc/refman/5.0/en/string-literals.html 。 另請注意,使用自定義轉義方法存在安全方面的顧慮。
def escape_for_sql(s)
s=s.to_s
if s.nil?
"''"
else
literals = %w{ % ' " \r \n }
literals.each do |x|
s.gsub!(/#{x}/) { '\\' + x }
end
"'" + s + "'"
end
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.