我正在编写一些使用sqlite3库的c ++代码.我正在使用一个准备好的语句,我在运行时绑定了一个变量.
如何在绑定后检查语句中的SQL查询?
例如,下面的代码不返回一行.当使用预制字符串和sqlite3_exec时,我得到了我期望的结果.
sqlite3_stmt *statement; const char *query = "SELECT * FROM foo WHERE (name='?');"; sqlite3_prepare_v2(db, query, strlen(query), &statemtnt, NULL); sqlite3_bind_text(statement, 1, "bar", -1, SQLITE3_STATIC); int result = sqlite3_step(statement); // expected: result = SQLITE_ROW // actual: result = SQLITE_DONE
编辑:正如费迪南德在下面所述,上面查询中的问题是?周围的引号.但是,对于将来,我仍然想知道如何检查sqlite3_stmt以查找将要执行的实际查询.
绑定后SQL查询不会更改 - 您的变量未插入SQL字符串或任何内容.
除了Neil所说的,还要在周围放下引号?占位符:
"SELECT * FROM foo WHERE name = ?"
否则SQLite不会替换问号,但会将其视为字符串"?".