2014-05-08 22 views
0

是否可以将查询的FROM子句中的参数绑定到SQLite?怎么样?SQLite中FROM子句中的绑定参数

如果不是,为什么?任何替代品?

这是我想在我的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]; 
} 

以下是错误消息我得到:

近 “?”:语法错误

我明白,还有其他方式check if a column exists。我特别好奇为什么我不能在FROM子句中绑定参数(只在上面的SELECT子句中绑定一个参数,所以它必须是FROM子句的问题)。

+0

在这里我的解决方案:http://stackoverflow.com/a/23834316/428143 – GiovaMaster

回答

1

?只能用于将实际值绑定到查询中,例如INSERTVALUES部分或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]; 
} 

请注意,你不应该在的地方使用?和实际值(你不在这种情况下有)正确值绑定的使用字符串格式。