我有一个 SQL 表,其中一列有多个逗号分隔值。下面的代码应该遍历所有这些值,如果列表中存在特定值,则返回 true,但是它似乎只适用于条目中第一个值以外的值。关于我哪里搞砸了有什么想法吗?使用 sqlite3 直接在数据库文件上运行查询时工作正常,因此我确定问题出在这个函数上。
bool group_exists(char *group)
{
int retv;
char *param_1, *param_2;
bool exists = false;
sqlite3_stmt *p_stmn;
param_1 = malloc(BUFFER_SIZE);
param_2 = malloc(BUFFER_SIZE);
sprintf(param_1, "%s,%%", group);
sprintf(param_2, "%%,%s,%%", group);
sqlite3_prepare_v2(db, "SELECT groups FROM users WHERE groups LIKE ? OR groups LIKE ?", -1, &p_stmn, NULL);
sqlite3_bind_text(p_stmn, 1, param_1, -1, NULL);
sqlite3_bind_text(p_stmn, 1, param_2, -1, NULL);
retv = sqlite3_step(p_stmn);
if (retv == SQLITE_ROW) {
exists = true;
} else if (retv != SQLITE_DONE) {
retval_crash();
}
free(param_1);
free(param_2);
sqlite3_finalize(p_stmn);
return exists;
}
最佳答案
确保将索引绑定(bind)到正确的 sql 参数。
sqlite3_bind_text(p_stmn, 1, param_1, -1, NULL);
sqlite3_bind_text(p_stmn, 2, param_2, -1, NULL);
此外,当尝试调试 sqlite 时,请务必检查 result codes以确保一切顺利。
关于c - 从 C 程序调试 SQLite 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7717508/