2013-11-24 6 views
6

나는 R에 문자열을 가지고 있는데, MySQL 테이블에 쓰려면 RODBC을 사용해야합니다. 문제는 내가 모르겠다. 문자열 내에서 따옴표를 처리하여 MySQL 오류를 얻지 않지만 텍스트를 엉망으로 처리하지 않는 방법은 무엇입니까?R에 인용 부호를 사용하여 SQL에 텍스트를 안전하게 전달하는 방법은 무엇입니까?

나는 해결책이 간단하다고 생각하지만, 지금은 내 자신의 생각에 집착하고있다. 나는 상자에서 빠져 나오지 않는다. 도망 가지 않고 도주하지 않고 두번의 백 슬래시 나 그 이상을 피할 수있다. (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) 

(I 가능한 단일 및 이중 따옴표를 가진 파일에서 읽을 텍스트를 처리하는 방법?)

답변

4

나는 배로 따옴표로 시작하는 것입니다 :이 따옴표를 두 배로

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

:

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

을 구현 : 그

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\\'\\'\\'\\'\\'\\'\\'\\'\\'" 

RMySQLLINK 수동 상태는 그 대체처럼하지 않을까요 모든 작은 따옴표를 "bubblediboo"로 삭제하거나 함께 삭제할 수 있습니까? 나는 그대로 텍스트를 보존하고 싶다. – petermeissner

+0

@marvin_dpr 코드에이 줄을 추가하기 만하면 작동합니다. – agstudy

+0

지금 코드를 확인할 수 있지만 작동은하지만 왜 작동합니까? – petermeissner

5

하나 RMySQL 패키지가 제공하는 dbEscapeStrings() 기능을 사용하는 경우는 아마 갈 수있는 가장 좋은 방법입니다. 이 함수는 MySQL이 정한 표준을 준수하여 탈출을 처리합니다.

dbEscapeStrings 현재는 MySQL의 드라이버가이 방법 나는 그것을 얻을하지 않습니다 생각

관련 문제