【发布时间】:2011-07-26 21:40:53
【问题描述】:
我正在尝试根据用户提供的文本在 SQLite 数据库中创建一个表。一切正常,除非我尝试在文本中添加撇号(这是新的表名)。经过研究,我确定我所做的不是最佳实践,因为容易被注入:
const char *sqlStr = [[NSString stringWithFormat:@"CREATE Table '%@' ('Name' 'char(50)','ID' 'integer')",theString]UTF8String];
所以我试图找到一种方法来允许在表名中包含撇号并将值安全地插入到数据库中。我已经阅读了有关绑定值的信息,但是使用“CREATE TABLE”语句可以做到这一点吗?还是仅当您将数据插入到已经存在的表中时?
感谢您的帮助。
【问题讨论】:
-
我不建议允许用户或其他一些动态方式命名列。如果有的话,将列命名为 custom1。
-
嗨,乔,我想让用户在数据库中创建表名,而不是列,这些是不可更改的。我只是不知道在使用撇号时最好的方法。
-
如果您使用FMDB,那么它将在执行您的 SQL 之前为您处理所有必要的转义(前提是您使用它的 API 进行替换)。我强烈建议您检查一下。