int mysql_stmt_attr_set(MYSQL_STMT *stmt, enum enum_stmt_attr_type option, const void *arg)
描述
可用于影响预处理语句的行为。可多次调用该函数来设置多个选项。
“option”参量是希望设置的选项,“arg”参量是选项的值。如果“option”是整数,那么“arg”应指向整数的值。
可能的选项值:
选项 |
参量类型 |
功能 |
STMT_ATTR_UPDATE_MAX_LENGTH |
my_bool * |
如果设为1:更新mysql_stmt_store_result()中的元数据MYSQL_FIELD->max_length。 |
STMT_ATTR_CURSOR_TYPE |
unsigned long * |
调用mysql_stmt_execute()时,语句将打开的光标类型。*arg可以是CURSOR_TYPE_NO_CURSOR(默认值)或CURSOR_TYPE_READ_ONLY。 |
STMT_ATTR_PREFETCH_ROWS |
unsigned long * |
使用光标时,一次从服务器获取的行数。*arg的范围从1到unsigned long的最大值。默认值为1。 |
如果与CURSOR_TYPE_READ_ONLY一起使用了STMT_ATTR_CURSOR_TYPE选项,当调用了mysql_stmt_execute()时,将为语句打开光标。如果存在由前一个mysql_stmt_execute()调用打开的光标,在打开新的光标前,将关闭该光标。此外,为再执行而准备语句之前,mysql_stmt_reset()还将关闭任何打开的光标。mysql_stmt_free_result()将关闭任何打开的光标。
如果为预处理语句打开了光标,没必要调用mysql_stmt_store_result(),这是因为,该函数会导致在客户端一侧对结果集进行缓冲处理。
在MySQL 5.0.2中增加了STMT_ATTR_CURSOR_TYPE选项。在MySQL 5.0.6中,增加了STMT_ATTR_PREFETCH_ROWS选项。
返回值
如果OK,返回0。如果选项未知,返回非0值。
错误
无。
示例:
在下述示例中,为预处理语句打开了1个光标,并将每次获取的行数设为5:
MYSQL_STMT *stmt;
int rc;
unsigned long type;
unsigned long prefetch_rows = 5;
stmt = mysql_stmt_init(mysql);
type = (unsigned long) CURSOR_TYPE_READ_ONLY;
rc = mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, (void*) &type);
/* ... check return value ... */
rc = mysql_stmt_attr_set(stmt, STMT_ATTR_PREFETCH_ROWS,
(void*) &prefetch_rows);
/* ... check return value ... */