2013-04-17 64 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