我正在使用以下代码片段从表中删除所有数据
NSString *deleteStatementNS = [NSString stringWithFormat:
@"DELETE FROM %@",[tableNames objectAtIndex:i]];
const char *prepareDelete ="DELETE FROM '?'";
const char *tbleName = [[tableNames objectAtIndex:i] UTF8String];
if (sqlite3_prepare_v2(dBase, prepareDelete, -1, &dbpreprdstmnt, NULL) == SQLITE_OK)
{
dbrc = sqlite3_bind_text(dbpreprdstmnt, 1, tbleName, -1, SQLITE_TRANSIENT);
dbrc = sqlite3_step(dbpreprdstmnt);
sqlite3_finalize(dbpreprdstmnt);
dbpreprdstmnt = NULL;
}
else
{
NSLog(@"Error %@",[NSString stringWithCString:sqlite3_errmsg(dBase) encoding:NSUTF8StringEncoding]);
}
但不幸的是,删除没有发生我收到错误,因为Error no such table: ?
我无法仅准备语句。但是如果我使用下面的准备语句
const char *prepareDelete =[deleteStatementNS UTF8String];
这工作得很好。我无法绑定变量来阻止 SQL 注入攻击。请问我知道这个错误背后的原因。我发现很多地方都报告了这个代码片段,因为它工作正常。