如何在SQLite插入语句中正确转义单引号 - iOS

时间:2015-01-04 01:28:18

标签: ios objective-c database sqlite insert

我的sqlite表有一个insert语句,其中包含值中的撇号。

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')

当我尝试将其插入表格时,我在" s"附近出现语法错误。我想要正确地逃避撇号。我该怎么做呢?谢谢,任何见解都表示赞赏!

编辑:我们已经解决了我们的问题。我们在字符串中输入了一些单引号('),我们真的想要单引号。卷曲的单引号不会弄乱SQLite插入语句。 对于遇到此问题的人,您可以使用单个卷曲引号而不是常规单引号。这在您的情况下可能无法实现,但对于某些人来说,它可能是一个简单的解决方案。

1 个答案:

答案 0 :(得分:3)

问题是您的数据中包含单引号。你有两个选择来解决这个问题。

  1. 使用'
  2. 逃脱\'
  3. 使用sqlite3_bind_xxx()方法绑定值(我更喜欢这种方法)。你可以这样做:

  4. 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
       }
    }