我试图转义红宝石字符串中的单引号。我使用此字符串作为插入查询将数据推送到 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'"
您可以使用单引号 (') 和双引号 (") 之间的区别。