2013-11-24 3 views
6

Rにいくつかの文字列があり、MySQLテーブルに書き込む必要があります。RODBCを使用してください。 問題は私にはわかりませんMySQLのエラーを取得するために文字列内の引用符を処理する方法も、テキストを台無しにすることはありませんか?安全にテキストをSQLに送信するためにRの引用符をエスケープするには?

解決策は簡単だと思いますが、現時点で私は自分の考え方に固執しています。私は箱から出ません。エスケープは2回のバックスラッシュ(または8、単に保存側にあるため)

例:

require(RODBC) 
con  <- odbcConnect("MyMySQLDatabase") 

string <- "What's up?" 
query <- "INSERT INTO table (textcolumn) VALUES" 

value <- paste0("('", string, "')") 
sql  <- paste(query, value, ";") 

res  <- sqlQuery(con, sql) 

(私は可能単一および二重引用符の付いたファイルから読み込んだテキストを処理する方法は?)

答えて

4

私倍増引用符で開始します:これは、引用符を倍増する

string <- gsub("'","''",string) 

string 
[1] "What''s up?" 
+0

を実装して、私はそれを取得しないと思う:それは交換するようなことはないでしょうすべての単一引用符を "bubblediboo"で削除するか、それらをすべて削除しますか?私は本当にそのままテキストを保存したい。 – petermeissner

+0

@marvin_dprあなたはコードにこの行を追加するだけで動作します。 – agstudy

+0

私はちょうど今、コードをチェックすることができます、それは動作しますがなぜですか? – petermeissner

5

1はRMySQLパッケージで提供さdbEscapeStrings()機能を使用している場合は、おそらく行くには最高の方法です。この関数は、MySQLによって設定された標準に準拠してエスケープ処理を行います。 LINK

require(RMySQL) 
mysql <- dbDriver("MySQL") 
con  <- dbConnect(mysql, user="superuser", 
       password="totallyawesomeandsavepassword", 
       host="dbhost.hosthome.dom", 
       dbname="awesome" 
       ) 
dbEscapeStrings(con,"'''''fhf'''''''''rh'''''''''") 

# [1] "\\'\\'\\'\\'\\'fhf\\'\\'\\'\\'\\'\\'\\'\\'\\'rh\\'\\'\\'\\'\\'\\'\\'\\'\\'" 

RMySQLのマニュアルのように述べている:

dbEscapeStringsは現在、唯一のMySQLドライバがこのメソッドに

関連する問題