我正在查看一些供应商代码,并且有这样的查询:
BOOL BindQuery(sqlite3_stmt* stmt, PARAMS* params)
{
char temp[150] = "";
char paramBuf[10] = "";
if (currStmt == NULL) return FALSE;
sprintf(paramBuf, "%d", (int)params->someParam);
strcpy(temp, "%");
strcat(temp, tempVolt);
strcat(temp, "%");
sqlite3_bind_text(stmt, 4, temp, strlen(temp), SQLITE_STATIC);
return TRUE;
}
后来在查询被执行的道路上。问题是这个查询永远不会匹配,即使它应该匹配。
我认为问题在于sqlite3_bind_text
绑定了一个局部变量,而 SQLite 保留了指向原始局部变量的指针。因此,当它超出范围时,它可能已经被覆盖。修复似乎是SQLITE_TRANSIENT
改用。谁能证实我的想法?还是我不在基地?
另一个奇怪的问题是供应商永远无法复制它。运气?