有什么理由我应该使用sqlite3_bind_int()函数吗?在准备执行函数之前传递整数变量是否可以?
示例A(伪代码):
// prepare statement
sstream s;
s << "insert into TABLE values(" << 1 << "," << 2 << ",?)";
//...
const char *sql = ... // sql is equal to "insert into TABLE values(1, 2, ?)";
Prepare(..., sql, ...);
sqlite3_bind_text(3, "text")
示例B(伪代码):
const char *sql = "insert into TABLE values(?, ?, ?)";
Prepare(..., sql, ...);
sqlite3_bind_int(1, 1);
sqlite3_bind_int(2, 2);
sqlite3_bind_text(3, "text")
我理解文本变量可以包含SQL Injection字符串,所以我应该使用bind_text函数,但是整数?
答案 0 :(得分:2)
绑定参数可以避免格式化问题或SQL注入攻击。
然而,对于普通整数来说,这都不是问题。
因此,如果其他代码对您来说更容易,那么您并不需要 来使用sqlite3_bind_int
。
另一方面,您肯定希望对float / text / blob值使用绑定,因此避免sqlite3_bind_int
可能只会使代码不一致。