是否可以将查询的 FROM 子句中的参数绑定(bind)到 SQLite?怎么办?
如果不是,为什么?还有其他选择吗?
这是我想在我的 iOS 应用程序中执行的操作:
- (BOOL)existsColumn:(NSString *)column inTable:(NSString *)table ofDatabase:(FMDatabase *)database {
NSString *query = @"SELECT ? FROM ? LIMIT 0";
NSArray *queryParameters = @[column, table];
return (BOOL)[database executeQuery:query withArgumentsInArray:queryParameters];
}
这是我收到的错误信息:
near "?": syntax error
我知道还有其他方法可以check if a column exists .我特别好奇为什么我不能在 FROM 子句中绑定(bind)参数(只能在上面的 SELECT 子句中绑定(bind)参数,所以它一定是 FROM 子句的问题)。
最佳答案
?
应该只用于将实际值绑定(bind)到查询中,例如 VALUES
节INSERT
或 WHERE
中的值条款。
要动态构建列名和表名,您应该在将查询字符串发送到 FMDB 之前简单地使用字符串格式来构建查询字符串。
- (BOOL)existsColumn:(NSString *)column inTable:(NSString *)table ofDatabase:(FMDatabase *)database {
NSString *query = [NSString stringWithFormat:@"SELECT %@ FROM %@ LIMIT 0", column, table];
return (BOOL)[database executeQuery:query];
}
请注意,您不应使用字符串格式来代替 ?
以及实际值的正确值绑定(bind)(在这种情况下您没有)。
关于ios - SQLite 中 FROM 子句中的绑定(bind)参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23553581/