簡體   English   中英

用Ruby將文件寫入MySQL命令

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM