1

ルビ文字列で一重引用符をエスケープしようとしています。この文字列を挿入クエリとして使用して、データを postgresql にプッシュしています。

生成されるクエリは次のようになります。

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

でエスケープしてみました

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

しかし、これはうまくいきませんでした。

私がいつも得るエラーは次のとおりです: Syntax Error Near s:

2つの単一引用符内の単一引用符をエスケープするには、正規表現が必要だと思いますが、わかりません。

これを修正するにはどうすればよいですか? ありがとうございました。

4

2 に答える 2

2

準備済みステートメントを使用する必要があります。準備済みステートメントは、速度を上げるのに役立ちます。クエリは、DB によって 1 回解析されます。また、実行しようとしているときに手動でエスケープする必要がなくなるのにも役立ちます。

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)
于 2012-12-17T09:31:40.080 に答える
0

これは、エスケープしたい一重引用符が常に「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'" 

一重引用符 (') と二重引用符 (") の違いを使用できます。

于 2012-12-17T09:34:58.943 に答える