2010-11-20 4 views
6

SQLite 테이블에 삽입해야하는 아포스트로피가있는 문자열을 생각해보십시오.아포스트로피가있는 문자열 값 삽입

INSERT INTO myTable (table_Title TEXT) VALUES ('world's') 

어떻게 마크 업 또는 INSERT 문에서 값에 아포스트로피를 탈출 할 수 있습니까?

답변

16

http://www.sqlite.org/c3ref/bind_blob.html

이 같은 문자열로 쿼리에 직접 입력을 통과 할 수 없습니다. SQL 인젝션 공격에 취약 할뿐만 아니라 Mac app에서는 큰 문제는 아니지만, Prepared Statements를 처분 할 때 여전히 나쁜 생각입니다. Prepared Statements는 기본 데이터베이스가 실제의 수정되지 않은 입력 값을 안전하게 읽도록 보장합니다.

특정 예를 들어

(오류가 간결/명확성을 위해 제거 확인) :

sqlite3 *db; 
sqlite3_open("test.db", &db); 

// Create a prepared statement 
sqlite3_stmt *stmt; 
const char *sql = "INSERT INTO myTable (table_Title TEXT) VALUES (?)"; 
sqlite3_prepare_v2(db, sql, -1, &stmt, NULL); 

// Bind the parameter (safely) 
sqlite3_bind_text(stmt, 1, "world's", -1, NULL); 

// Execute the prepared statement 
sqlite3_step(stmt); 

(테스트되지 않은,하지만 당신은 아이디어를 얻을).