描述
在SQL语句输入到sqlite3_prepare_v2及其变体的文本中,文字可能会被匹配以下模板之一的参数所替代:
?
?NNN
:VVV
@VVV
$VVV
在上面的模板中,NNN表示一个整数,VVV表示一个字母数字标识符。这些参数的值(也称为“主机参数名称”或“SQL参数”)可以使用sqlite3_bind_*函数设置。
C / C ++语法
int sqlite3_bind_value(sqlite3_stmt*, int, const sqlite3_value*); |
PB语法
FUNCTION sqlite3_bind_value ( _ BYVAL hStmt AS DWORD, _ BYVAL idx AS LONG, _ BYREF value AS ANY _ ) AS LONG |
参数
pStmt
[in]语句句柄。
idx
[in]要设置的SQL参数的索引。最左边的SQL参数的索引为1。当使用相同的命名SQL参数多次,第二次和后续出现与第一次出现相同的索引。如果需要,可以使用sqlite3_bind_parameter_indexAPI查询命名参数的索引。“?NNN”参数的索引是NNN的值。NNN值必须介于1和sqlite3_limit参数SQLITE_LIMIT_VARIABLE_NUMBER之间(默认值:999)。
value
[in]绑定到参数的值。
返回值
SQLITE_OK成功或错误代码如果出现问题。如果参数索引超出范围,则返回SQLITE_RANGE。如果的malloc失败,则返回SQLITE_NOMEM。
备注
绑定不会被sqlite3_reset功能清除。Unbound参数被解释为NULL。
C ++实现代码
SQLITE_API int sqlite3_bind_value(sqlite3_stmt *pStmt, int i, const sqlite3_value *pValue){
int rc;
switch( pValue->type ){
case SQLITE_INTEGER: {
rc = sqlite3_bind_int64(pStmt, i, pValue->u.i);
break;
}
case SQLITE_FLOAT: {
rc = sqlite3_bind_double(pStmt, i, pValue->r);
break;
}
case SQLITE_BLOB: {
if( pValue->flags & MEM_Zero ){
rc = sqlite3_bind_zeroblob(pStmt, i, pValue->u.nZero);
}else{
rc = sqlite3_bind_blob(pStmt, i, pValue->z, pValue->n,SQLITE_TRANSIENT);
}
break;
}
case SQLITE_TEXT: {
rc = bindText(pStmt,i, pValue->z, pValue->n, SQLITE_TRANSIENT,
pValue->enc);
break;
}
default: {
rc = sqlite3_bind_null(pStmt, i);
break;
}
}
return rc;
}