如何在 SQLite 插入语句中正确转义单引号 - iOS
How to properly escape single quotes in SQLite insert statement - iOS
我有一个用于我的 sqlite table 的插入语句,它在值中包含撇号。
NSString *sqlInsert = [NSString stringWithFormat:@"insert into myTable (_id, name, area, title, description, url) VALUES (%i, '%@', '%@', '%@', '%@', '%@')", tempObject.ID, tempObject.name, tempObject.area, tempObject.title, tempObject.description, tempObject.url];
那个字符串的结果是这个
insert into myTable (_id, name, area, title, description, url) VALUES (0, 'John Smith', 'USA', 'Programmer', 'John Smith is a programmer. He programs a lot. John Smith's duty is to program. He loves it. His dog's name is Billy.', 'www.google.com')
当我尝试将其插入 table 时,我在 "s" 附近遇到语法错误。我想正确地转义撇号。我该怎么做呢?谢谢,如有任何见解,我们将不胜感激!
编辑: 我们已经解决了我们的问题。我们在字符串中输入了一些单引号 ('),而我们确实需要单引号。卷曲的单引号不会混淆 SQLite 插入语句。 对于遇到此问题的人,您可以使用单弯引号代替常规单引号。这在您的情况下可能无法实现,但对于某些人来说,这可能是一个简单的解决方案。
问题是您的数据中包含单引号。你有两个选择来克服这个问题。
- 用
\'
转义'
- 使用sqlite3_bind_xxx() 方法绑定值(我更喜欢这种方法)。你可以这样做:
NSString *sqlInsert = @"insert into myTable (_id, name, area, title, description, url) VALUES (?, ?, ?, ?, ?, ?)";
if (sqlite3_open([yourDBPath UTF8String], &yourDB) == SQLITE_OK)
{
if (sqlite3_prepare_v2(yourDB, sql, 1, &stmt, NULL) == SQLITE_OK)
{
sqlite3_bind_int(stmt, 1, tempObject.ID);
sqlite3_bind_text(stmt, 2, [tempObject.name UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(stmt, 3, [tempObject.area UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(stmt, 4, [tempObject.title UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(stmt, 5, [tempObject.description UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(stmt, 6, [tempObject.url UTF8String], -1, SQLITE_TRANSIENT);
// Execute
}
}
我有一个用于我的 sqlite table 的插入语句,它在值中包含撇号。
NSString *sqlInsert = [NSString stringWithFormat:@"insert into myTable (_id, name, area, title, description, url) VALUES (%i, '%@', '%@', '%@', '%@', '%@')", tempObject.ID, tempObject.name, tempObject.area, tempObject.title, tempObject.description, tempObject.url];
那个字符串的结果是这个
insert into myTable (_id, name, area, title, description, url) VALUES (0, 'John Smith', 'USA', 'Programmer', 'John Smith is a programmer. He programs a lot. John Smith's duty is to program. He loves it. His dog's name is Billy.', 'www.google.com')
当我尝试将其插入 table 时,我在 "s" 附近遇到语法错误。我想正确地转义撇号。我该怎么做呢?谢谢,如有任何见解,我们将不胜感激!
编辑: 我们已经解决了我们的问题。我们在字符串中输入了一些单引号 ('),而我们确实需要单引号。卷曲的单引号不会混淆 SQLite 插入语句。 对于遇到此问题的人,您可以使用单弯引号代替常规单引号。这在您的情况下可能无法实现,但对于某些人来说,这可能是一个简单的解决方案。
问题是您的数据中包含单引号。你有两个选择来克服这个问题。
- 用
\'
转义 - 使用sqlite3_bind_xxx() 方法绑定值(我更喜欢这种方法)。你可以这样做:
'
NSString *sqlInsert = @"insert into myTable (_id, name, area, title, description, url) VALUES (?, ?, ?, ?, ?, ?)";
if (sqlite3_open([yourDBPath UTF8String], &yourDB) == SQLITE_OK)
{
if (sqlite3_prepare_v2(yourDB, sql, 1, &stmt, NULL) == SQLITE_OK)
{
sqlite3_bind_int(stmt, 1, tempObject.ID);
sqlite3_bind_text(stmt, 2, [tempObject.name UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(stmt, 3, [tempObject.area UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(stmt, 4, [tempObject.title UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(stmt, 5, [tempObject.description UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(stmt, 6, [tempObject.url UTF8String], -1, SQLITE_TRANSIENT);
// Execute
}
}