我对 sqlite3 的 参数 有些奇怪的感觉,我想向您请教。
以下是我的查询和失败信息:
#query
'SELECT id FROM ? WHERE key = ? AND (userid = '0' OR userid = ?) ORDER BY userid DESC LIMIT 1;'
#error message, fails when calling sqlite3_prepare()
error: 'near "?": syntax error'
在我的代码中看起来像是:
// Query is a helper class, at creation it does an sqlite3_preprare()
Query q("SELECT id FROM ? WHERE key = ? AND (userid = 0 OR userid = ?) ORDER BY userid DESC LIMIT 1;");
// bind arguments
q.bindString(1, _db_name.c_str() ); // class member, the table name
q.bindString(2, key.c_str()); // function argument (std::string)
q.bindInt (3, currentID); // function argument (int)
q.execute();
我有这样的感觉,好像无法在sqlite参数中使用表名,但我在Sqlite3 C API中找不到确认。
你知道我的查询有什么问题吗?
我是否需要预处理SQL语句以在准备查询之前包含表名?
INSERT
,UPDATE
和WHERE
是SQL语言的静态固定词法分析器,但表名不是,依我看。 - Gui13