6.4.3 mysql_stmt_attr_set()

bool
mysql_stmt_attr_set(MYSQL_STMT *stmt,
                    enum enum_stmt_attr_type option,
                    const void *arg)

说明

可用于影响预处理语句的行为。 可以多次调用此函数来设置多个选项。

option 参数是要设置的选项。 arg 参数是选项的值。 arg 应指向设置为所需属性值的变量。 变量类型如下表所示。

下表显示了可能的 option 值。

选项 参数类型 函数
STMT_ATTR_UPDATE_MAX_LENGTH 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。

如果将 STMT_ATTR_CURSOR_TYPE 选项与 CURSOR_TYPE_READ_ONLY 一起使用,则在调用 mysql_stmt_execute() 时,会为该语句打开一个光标。 如果之前的 mysql_stmt_execute() 调用已经打开了光标,则它会在打开新光标之前关闭该光标。 mysql_stmt_reset() 还会在准备重新执行语句之前关闭任何打开的光标。 mysql_stmt_free_result() 会关闭任何打开的光标。

如果为预处理语句打开光标,则不需要 mysql_stmt_store_result(),因为该函数会导致结果集缓冲在客户端。

返回值

成功则返回零。如果 option 未知,则返回非零值。

错误

无。

示例

以下示例为预处理语句打开一个光标,并将每次获取的行数设置为 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 ... */