正如 Sqlite 文档所指定的,准备好的语句中的未绑定(bind)参数被解释为 NULL - 那么我的问题是:
有没有办法让 Sqlite 确保所有参数至少绑定(bind)一次,从而确保不会意外丢失任何参数?
最好是得到一个错误并需要调用 sqlite3_bind_null(statement_, col);
然后得到一个微妙的错误,因为我忘记调用 sqlite3_bind_*
更新语句的 where 子句!
最佳答案
使用当前的 SQLite 库无法区分未绑定(bind)参数和设置为 NULL 的参数。
如果您查看sqlite3_bind_null()
的C源代码,您会发现它只是调用了解除参数绑定(bind)的内部SQLite函数。因此无法区分这两种情况。
对此的唯一解决方案是用您自己的函数包装 SQLite C API 函数,这些函数将进行一些簿记工作。您可以将位图与每个 sqlite3_stmt 结构捆绑在一起,当且仅当绑定(bind)相应的参数时,每个位都设置为 true。您必须至少为 sqlite3_bind_*()
函数和 sqlite3_clear_bindings()
创建包装器。
关于sqlite - 如何防止Sqlite未绑定(bind)参数解释为NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4585336/