0

当我用这段代码插入记录时,我尝试了一些 sqlite 程序进行练习,它给出了一些错误

-(void) insertRecordIntoTableNamed:(NSString *) tableName
                            withField1:(NSString *) field1
                           field1Value:(NSString *) field1Value
                             andField2:(NSString *) field2
                           field2Value:(NSString *) field2Value {
        NSString *sql = [NSString stringWithFormat:
                         @"INSERT INTO ‘%@‘ (‘%@‘, ‘%@‘) VALUES (‘%@‘,’%@‘)",tableName, field1, field2, field1Value, field2Value];
        char *err;
        if (sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK) {
            sqlite3_close(db);
            NSAssert(0, @"Error updating table.");
        }
    }

错误信息是

** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Error updating table.'

我尝试通过终端插入数据并正确检索数据

所以请帮助我通过程序插入数据

4

2 回答 2

2

当您使用 char * as sql 语句作为 NSString 对象时,它可能会更好地工作。例如:

char *sql = "插入'?' ('?', '?') 值 ('?' ....";

更换?与您的 NSString 参数一起使用下面的函数。

sqlite3_bind_text(insert_statement, 1, [tableName UTF8String], -1, SQLITE_TRANSIENT); sqlite3_bind_text(insert_statement, 2, [field1 UTF8String], -1, SQLITE_TRANSIENT); ETC....

首先,您必须定义 insert_statement。静态 sqlite3_stmt *insert_statement = nil; ...最后你应该用 sqlite3_reset(insert_statement); 重置语句

于 2013-01-05T17:39:41.943 回答
1

左单引号不适合在 SQLite 中引用标识符或值。用 " (\x22) 引用标识符,用 ' (\x27) 引用数据。

另外,我希望您的程序足够简单,以至于潜在的 SQL 注入无关紧要。

于 2013-01-05T11:28:46.727 回答