sqlite语句文本语法是否接近?

sqlite语句文本语法是否接近?,sqlite,syntax,prepare,Sqlite,Syntax,Prepare,函数返回error,error msg从sqlite3_errmsg(mConn)获取; 它提示“?”附近的:语法错误 为什么? 将通过。在SQLite(或任何其他SQL引擎)中,您只能将参数化变量用作插入、更新或约束的值。当用作左值时,不能在SQL语句的任意部分使用它,而不能在关键字、表名或列名中使用它 这是因为SQLite必须解析您的SQL语句,并决定如何可能将其与其他表连接,使用哪些索引,以及类似的决定,这些决定随后成为查询计划 第二个示例中的动态绑定变量不会更改查询计划,也可以使用,但是

函数返回error,error msg从
sqlite3_errmsg(mConn)
获取; 它提示“?”附近的
:语法错误
为什么?

将通过。

在SQLite(或任何其他SQL引擎)中,您只能将参数化变量用作插入、更新或约束的值。当用作左值时,不能在SQL语句的任意部分使用它,而不能在关键字、表名或列名中使用它


这是因为SQLite必须解析您的SQL语句,并决定如何可能将其与其他表连接,使用哪些索引,以及类似的决定,这些决定随后成为查询计划

第二个示例中的动态绑定变量不会更改查询计划,也可以使用,但是更改表名会改变查询计划,而SQLite根本不喜欢


如果确实需要动态提供表名,可以在代码中动态生成SQL字符串,然后将该字符串传递给SQLite,使表名已经存在(不是
)?由于查询“select count(id)from?”包含问号,您需要bing值Syntex:sqlite3\u bind\u text(,,)“这是因为SQLite必须解析您的SQL语句,并决定如何可能将其与其他表连接,使用哪些索引以及类似的决定,这些决定随后成为查询计划。”。为什么要把它和桌子连接起来?
const char* sqlstr = "select count(id) from ?";

sqlite_prepare_v2(mConn, sqlstr, -1, &smtm, NULL)
select ? from account