我尝试了一些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.'
我尝试通过终端插入数据并正确地恢复数据
所以请帮我通过程序插入数据
答案 0 :(得分:2)
当您使用char *作为sql语句作为NSString对象时,它可能会更好。例如:
char * sql =“INSERT INTO'?'('?','?')VALUES('?'....”;
更换?使用NSString参数使用下面的函数。
sqlite3_bind_text(insert_statement,1,[tableName UTF8String], - 1,SQLITE_TRANSIENT); sqlite3_bind_text(insert_statement,2,[field1 UTF8String], - 1,SQLITE_TRANSIENT); 等....
首先,您必须定义insert_statement。 static sqlite3_stmt * insert_statement = nil; ...最后你应该用sqlite3_reset(insert_statement);
重置语句答案 1 :(得分:1)
LEFT SINGLE QUOTATION MARK不适合在SQLite中引用标识符或值。使用“(\ x22)引用标识符,使用'(\ x27)。
引用数据另外,我希望你的程序足够简单,以至于潜在的SQL注入无关紧要。