2

我在这个声明中得到一个断言失败;

SELECT keyphrase_id, keyphrase, url, googlename FROM keyphrases left join domains on keyphrases.domain_id = domains.domain_id where domain_id = ? and ifnull(keytime,'') != ? order by keyphrase desc;

我通过一个 SQL 查询检查器运行它,它突出显示了“!=”位,指出它的语法不正确。这对我来说没有意义,因为我以前使用过这个语句;

SELECT keyphrase_id, keyphrase, url, googlename FROM keyphrases left join domains on keyphrases.domain_id = domains.domain_id  where ifnull(keytime,'') != ? order by keyphrase desc;

这就是我绑定where值的方式;

sqlite3_bind_int(selStmt, 1, domain_ID);

sqlite3_bind_text(selStmt, 2, [dateString UTF8String] , -1, SQLITE_TRANSIENT);

我根本无法解决这个问题,这绝对与打开的数据库或执行时的语句等无关,nil因为我正在更改的方法的唯一组件是 SQL 语句。

任何人都可以提出任何可能的原因吗?

4

1 回答 1

1

sqlite3如果您从任何暗示错误的函数调用中获得返回码,请再次调用sqlite3_errmsg并查看错误消息,例如

NSLog(@"%s err: %s", __FUNCTION__, sqlite3_errmsg(database));

这会告诉你出了什么问题。

就个人而言,我会认为从句中的引用domain_idwhere模棱两可的,但sqlite3_errmsg会准确地告诉你发生了什么。

于 2012-10-04T04:38:21.247 回答