在带有FMDB的SQLite上插入特殊字符

时间:2013-05-09 20:25:21

标签: objective-c sqlite fmdb

我在使用FMDB将值插入表时遇到问题。 我有这样的SQL字符串:

NSString *sql = [NSString stringWithFormat:@"INSERT INTO table( COMPANY, PAGE_NO ) VALUES ('%@',%d,%d)",value1,value2,value3];

我将这样的FMDB用于上面的SQL字符串:

[FMDatabase: 0x433e80> executeUpdate: sql]

它有效,但是当我使用value1 = @"Test'12"时。它有一个字符" ' ",但它失败了。

请帮助我,我想继续使用FMDB中的方法executeUpdate

由于

1 个答案:

答案 0 :(得分:4)

看起来您没有向查询传递正确数量的参数,您列出了2列并传递了3个参数。我认为这是一个错字。

你应该真正参数化你的查询;使用?参数应该去的地方,而不是将它们传递给executeUpdate。这样,有问题的字符将自动处理。

这会将您的代码更改为更像的内容;

NSString *sql = @"INSERT INTO table(COMPANY, PAGE_NO) VALUES (?,?)";
[database executeUpdate:sql, value1, [NSNumber numberWithInt:value2], nil];

请注意将numberWithInt转换为int所需的NSNumber调用,因为executeUpdate要求其所有参数都是对象,而不是基本类型。