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() 更新 metadata 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 ... */