转义 Ruby 中的撇号



我试图转义红宝石字符串中的单引号。我使用此字符串作为插入查询将数据推送到 postgresql 中。

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

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

我尝试用

str.gsub("/'/",\\')

但这没有用。

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

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

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

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

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)

如果要转义的单引号始终位于"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'" 

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

最新更新