2013-04-17 139 views
0

我正在使用FMDB來管理我的sqlite數據庫。我實現了一個插入函數並使用它來插入一些行。但有一行無法插入,插入時錯誤代碼爲7,錯誤消息內存不足。如何在init sql字符串中添加轉義字符到字符串?

我跟蹤sql執行並找到一個字符串值有'可能導致錯誤的sql語句的字符。所以我想知道如何將這個字符轉換成數據庫。

SQL字符串是NSString *sql = [NSString stringWithFormat:@"INSERT INTO table(COMPANY, PAGE_NO, RECORD_ID) VALUES('%@',%d,%d)",table.company,table.page_no,table.record_id];和控制檯輸出

<FMDatabase: 0x433e80> executeUpdate: INSERT INTO table(COMPANY, PAGE_NO, RECORD_ID) VALUES('Wendy's',-1,234) 

公司是一個文本和相應的值是溫迪。 '字符可能會導致錯誤。

在此先感謝。

回答

1

不要試圖逃避字符串;只是使用參數:

sql = [NSString stringWithFormat: 
     @"INSERT INTO tbl(COMPANY, PAGE_NO, RECORD_ID) VALUES(?, %d, %d)", 
     table.page_no, table.record_id]; 
sqlite3_prepare_v2(...); 
sqlite3_bind_text(statement, 1, [table.company UTF8String], -1, SQLITE_TRANSIENT); 
+1

謝謝你的回答。我知道​​嗎?現在比%@好。 – chancyWu

+0

爲什麼這樣做呢?徹底擺脫'stringWithFormat:'並且使用'sqlite3_bind_xxx'來表示所有的值,而不僅僅是字符串。 – rmaddy