【问题标题】:sqlite3 WHERE statement issuessqlite3 WHERE 语句问题
【发布时间】:2015-02-08 19:33:20
【问题描述】:
[self openDB];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *set = [defaults stringForKey:@"defaultSet"];
if ([set length] > 0) {
    NSString *trySql = [NSString stringWithFormat:@"SELECT setName FROM setData WHERE setName = `%@`", set];
    sqlite3_stmt *tryStatement;
    if (sqlite3_prepare_v2(db, [trySql UTF8String], -1, &tryStatement, nil)==SQLITE_OK) {
        NSLog(@"set here");
    } else {
        NSAssert(0, @"%s", sqlite3_errmsg(db));
        sqlite3_close(db);
    }
}

所以我返回reason: 'no such column: set'的错误

现在,这就是我通常的写作方式,除了我会为 .php 使用 PDO:: 技术,但在目标 c 中它有些不同。我不确定我是否正确使用它。

我是否需要某种类型的 bindValue,或者我是否正在尝试查找具有行名和/或..的列名?

【问题讨论】:

  • 您的值中的引号类型似乎错误,但确实使用了绑定参数。
  • @Mat 看来更改引号的简单技巧解决了我的问题,然后我可以检查行以确定 nsdefault 是否仍然合适。一个小时头痛的简单解决方法!谢谢,如果您发布答案,我会接受。
  • 啊哈,如果@Mat 不想,您也可以发布自己的答案。

标签: objective-c sqlite


【解决方案1】:

反引号用于引用列名。 (SQL 实际上使用双引号,反引号仅支持与 MySQL 兼容。)

在 SQL 中,字符串用单引号引起来:

... WHERE `SomeColumn` = 'SomeString'

无论如何,您应该改为use parameters

【讨论】:

  • 我想太多的 MySQL 钻进了我的大脑,非常感谢,(不是说这是 mysql 的正确方法)
猜你喜欢
  • 1970-01-01
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多