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 ... */