PDF (美式信紙) - 1.4Mb
PDF (A4) - 1.4Mb
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() 是不必要的,因為該函數會導致結果集緩衝在客戶端。
以下範例為預處理語句開啟游標,並設定每次擷取的列數為 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 ... */