我正在编写一个小应用程序(Login Mask)来熟悉SQLite3的使用。 现在我对sqlite3_bind_text()的正确用法有疑问。我创建了一个只有1行的小型数据库。在这部分代码中,我想将用户输入绑定到一个变量并将其绑定到一个语句。传递的用户输入是通过getline(cin,variable)函数。
我的问题: 当我尝试使用bind方法时,我立即获得“False Library use”。结果总是21.我已多次阅读API documentation,但我显然不明白最后一部分。
有人可以告诉我如何正确使用此功能吗? 我检查了我的列类型,它们是“Text NOT NULL”。
int Login::check_login(string username, string password) {
int errcode = 0;
string query = "Select a_username,a_password from t_user where a_username = ? and a_password = ?;";
sqlite3_stmt *createStmt;
errcode = sqlite3_prepare_v2(datab->get_db(), query.c_str(), query.size(), &createStmt, NULL);
if (!errcode)
throw runtime_error("Failed! Can not prepare statement DB.");
errcode = sqlite3_bind_text(createStmt, 1, password.c_str(), -1, SQLITE_STATIC); // Always 21 because of false library use
//there is more code but i think this should be enough
P.S。 我用Google搜索了这两天,发现没有解决方案/简单解释我的问题。
答案 0 :(得分:2)
我认为你对sqlite3_prepare_v2()
的调用失败并且没有准备有效的声明(你没有得到例外,不是吗?),但错误检查中有错字。
当sqlite3_ *函数成功时,它返回SQLITE_OK
0
。所以正确的错误检查是:
if (errcode)
throw runtime_error("Failed! Can not prepare statement DB.");
这就是sqlite3_bind_text()
也失败的原因。