【问题标题】:Escaping apostrophe in Ruby在 Ruby 中转义撇号
【发布时间】:2012-12-17 09:28:31
【问题描述】:

我正在尝试转义 ruby​​ 字符串中的单引号。我使用这个字符串作为插入查询将数据推送到 postgresql 中。

将生成的查询如下所示:-

str = insert into table field1,field2 values 'Gaurav's', 'Scooter'

我尝试用

来逃避它
str.gsub("/'/",\\\\')

但这没有用。

我总是得到的错误是: s 附近的语法错误:

我想我需要一个正则表达式来转义两个单引号内的单引号,但不确定。

我该如何解决这个问题?谢谢。

【问题讨论】:

  • 你在使用 ruby​​-pg gem吗?
  • 是的,我正在使用 ruby​​ pg gem
  • 另外,你的字符串不应该用双引号引起来吗? str = "insert...
  • 是的,字符串是双引号的。很抱歉忘记补充了。但是只有在我知道要插入什么值的情况下才能使用它。如果我在单个字符串变量中有值,例如 fieldStr = "field1,field2" 和 valuesStr = "Gaurav's, Scooter"。那我该怎么做呢?
  • 对不起,我不明白你上面的评论。你是说给你一个 SQL 字符串?或者您知道要插入的值?

标签: ruby-on-rails ruby postgresql-9.1


【解决方案1】:

您应该使用prepared statements。准备好的语句有助于提高您的速度。查询由数据库解析一次。它们还可以帮助您避免在尝试时进行手动转义。

f1_val = "Gaurav's"
f2_val = "Scooter"

# conn is your connection object
conn.prepare('givethisqueryaname', "INSERT INTO table field1,field2 VALUES ($1,$2)")
conn.exec_prepared('givethisqueryaname',[f1_val, f2_val])

如果给定字段名称和字符串形式的字段值,则可以这样做。

fieldStr = "field1,field2"
valuesStr = "Gaurav's, Scooter"
arr = valuesStr.split(",")
conn.prepare('insert_x', "INSERT INTO table #{fieldStr} VALUES ($1,$2)")
conn.exec_prepared('insert_x', arr)

【讨论】:

    【解决方案2】:

    如果您要转义的单引号始终位于“s”前面,则此方法有效

    1.9.3p125 :020 > str = "insert into table field1,field2 values 'Gaurav's', 'Scooter'"
     => "insert into table field1,field2 values 'Gaurav's', 'Scooter'" 
    1.9.3p125 :021 > str.gsub("'s","-s")
     => "insert into table field1,field2 values 'Gaurav-s', 'Scooter'" 
    

    您可以使用单引号(')和双引号(“)之间的区别。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-13
      • 2022-11-15
      • 2012-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多