ps:來(lái)自https://www.mysqlzh.com/doc/194.html
MYSQL_FIELDS結(jié)構(gòu)
char *name字段名稱,由NULL終結(jié)的字符串。
char * org_name字段名稱,由NULL終結(jié)的字符串;忽略別名。
char * table包含該字段的表的名稱,如果該字段不是計(jì)算出的字段的話。
char * org_table 表的名稱,由Null終結(jié)的字符串。忽略別名。
char * db 字段源自的數(shù)據(jù)庫(kù)的名稱,由Null終結(jié)的字符串。
char * catalog catalog的名稱;該值總是"def"。
char * def 該字段的默認(rèn)值是由Null終結(jié)的字符串;僅當(dāng)使用mysql_list_fields()時(shí)才設(shè)置它。
unsigned long length字段的寬度,例如如果為int應(yīng)該是4字節(jié)寬度。
unsigned long max_length 用于結(jié)果集的字段的最大寬度。
unsigned int org_name_length org_name的長(zhǎng)度。
unsigned int table_length表名的長(zhǎng)度。
unsigned int db_length數(shù)據(jù)庫(kù)名的長(zhǎng)度。
unsigned int flags 用于字段的不同“位標(biāo)志”。如下表
| 標(biāo)志值 | 標(biāo)志描述 |
|---|---|
| NOT_NULL_FLAG | 字段不能為NULL |
| PRI_KEY_FLAG | 字段是主鍵的組成部分 |
| UNIQUE_KEY_FLAG | 字段是唯一鍵的組成部分 |
| MULTIPLE_KEY_FLAG | 字段是非唯一鍵的組成部分 |
| UNSIGNED_FLAG | 字段具有UNSIGNED屬性 |
| ZEROFILL_FLAG | 字段具有ZEROFILL屬性 |
| BINARY_FLAG | 字段具有BINARY屬性 |
| AUTO_INCREMENT_FLAG | 字段具有AUTO_INCREMENT屬性 |
| ENUM_FLAG | 字段是ENUM(不再重視) |
| SET_FLAG | 字段是 SET(不再重視) |
| BLOB_FLAG | 字段是BLOB或TEXT(不再重視) |
| TIMESTAMP_FLAG | 字段是TIMESTAMP(不再重視) |
flag使用如下:
if (field->flags & NOT_NULL_FLAG)
printf("Field can't be null\n");
| 標(biāo)志狀態(tài) | 描述 |
|---|---|
| IS_NOT_NULL(flags) | 如果該字段定義為NOT NULL,為“真”。 |
| IS_PRI_KEY(flags) | 如果該字段是主鍵,為“真”。 |
| IS_BLOB(flags) | 如果該字段是BLOB或TEXT,為“真”(不再重視,用測(cè)試field->type取而代之)。 |
enum enum_field_types type 字段類型。
| 類型值 | 類型描述 |
|---|---|
| MYSQL_TYPE_TINY | TINYINT字段 |
| MYSQL_TYPE_SHORT | SMALLINT字段 |
| MYSQL_TYPE_LONG | INTEGER字段 |
| MYSQL_TYPE_INT24 | MEDIUMINT字段 |
| MYSQL_TYPE_LONGLONG | BIGINT字段 |
| MYSQL_TYPE_DECIMAL | DECIMAL或NUMERIC字段 |
| MYSQL_TYPE_NEWDECIMAL | 精度數(shù)學(xué)DECIMAL或NUMERIC |
| MYSQL_TYPE_FLOAT | FLOAT字段 |
| MYSQL_TYPE_DOUBLE | DOUBLE或REAL字段 |
| MYSQL_TYPE_BIT | BIT字段 |
| MYSQL_TYPE_TIMESTAMP | TIMESTAMP字段 |
| MYSQL_TYPE_DATE | DATE字段 |
| MYSQL_TYPE_TIME | TIME字段 |
| MYSQL_TYPE_DATETIME | DATETIME字段 |
| MYSQL_TYPE_YEAR | YEAR字段 |
| MYSQL_TYPE_STRING | CHAR字段 |
| MYSQL_TYPE_VAR_STRING | VARCHAR字段 |
| MYSQL_TYPE_BLOB | BLOB或TEXT字段(使用max_length來(lái)確定最大長(zhǎng)度) |
| MYSQL_TYPE_SET | SET字段 |
| MYSQL_TYPE_ENUM | ENUM字段 |
| MYSQL_TYPE_GEOMETRY | Spatial字段 |
| MYSQL_TYPE_NULL | NULL-type字段 |
| MYSQL_TYPE_CHAR | 不再重視,用MYSQL_TYPE_TINY取代 |
可以使用IS_NUM()宏來(lái)測(cè)試字段是否具有數(shù)值類型。將類型值傳遞給IS_NUM(),如果字段為數(shù)值類型,會(huì)將其評(píng)估為“真”:
if (IS_NUM(field->type))
printf("Field is numeric\n");
C API 函數(shù)
| 函數(shù) | 描述 |
|---|---|
| mysql_affected_rows() | 返回上次UPDATE、DELETE或INSERT查詢更改/刪除/插入的行數(shù)。 |
| mysql_autocommit() | 切換 autocommit模式,ON/OFF |
| mysql_change_user() | 更改打開連接上的用戶和數(shù)據(jù)庫(kù)。 |
| mysql_charset_name() | 返回用于連接的默認(rèn)字符集的名稱。 |
| mysql_close() | 關(guān)閉服務(wù)器連接。 |
| mysql_commit() | 提交事務(wù)。 |
| mysql_connect() | 連接到MySQL服務(wù)器。該函數(shù)已不再被重視,使用mysql_real_connect()取代。 |
| mysql_create_db() | 創(chuàng)建數(shù)據(jù)庫(kù)。該函數(shù)已不再被重視,使用SQL語(yǔ)句CREATE DATABASE取而代之。 |
| mysql_data_seek() | 在查詢結(jié)果集中查找屬性行編號(hào)。 |
| mysql_debug() | 用給定的字符串執(zhí)行DBUG_PUSH。 |
| mysql_drop_db() | 撤銷數(shù)據(jù)庫(kù)。該函數(shù)已不再被重視,使用SQL語(yǔ)句DROP DATABASE取而代之。 |
| mysql_dump_debug_info() | 讓服務(wù)器將調(diào)試信息寫入日志。 |
| mysql_eof() | 確定是否讀取了結(jié)果集的最后一行。該函數(shù)已不再被重視,可以使用mysql_errno()或mysql_error()取而代之。 |
| mysql_errno() | 返回上次調(diào)用的MySQL函數(shù)的錯(cuò)誤編號(hào)。 |
| mysql_error() | 返回上次調(diào)用的MySQL函數(shù)的錯(cuò)誤消息。 |
| mysql_escape_string() | 為了用在SQL語(yǔ)句中,對(duì)特殊字符進(jìn)行轉(zhuǎn)義處理。 |
| mysql_fetch_field() | 返回下一個(gè)表字段的類型。 |
| mysql_fetch_field_direct() | 給定字段編號(hào),返回表字段的類型。 |
| mysql_fetch_fields() | 返回所有字段結(jié)構(gòu)的數(shù)組。 |
| mysql_fetch_lengths() | 返回當(dāng)前行中所有列的長(zhǎng)度。 |
| mysql_fetch_row() | 從結(jié)果集中獲取下一行 |
| mysql_field_seek() | 將列光標(biāo)置于指定的列。 |
| mysql_field_count() | 返回上次執(zhí)行語(yǔ)句的結(jié)果列的數(shù)目。 |
| mysql_field_tell() | 返回上次mysql_fetch_field()所使用字段光標(biāo)的位置。 |
| mysql_free_result() | 釋放結(jié)果集使用的內(nèi)存。 |
| mysql_get_client_info() | 以字符串形式返回客戶端版本信息。 |
| mysql_get_client_version() | 以整數(shù)形式返回客戶端版本信息。 |
| mysql_get_host_info() | 返回描述連接的字符串。 |
| mysql_get_server_version() | 以整數(shù)形式返回服務(wù)器的版本號(hào)。 |
| mysql_get_proto_info() | 返回連接所使用的協(xié)議版本。 |
| mysql_get_server_info() | 返回服務(wù)器的版本號(hào)。 |
| mysql_info() | 返回關(guān)于最近所執(zhí)行查詢的信息。 |
| mysql_init() | 獲取或初始化MYSQL結(jié)構(gòu)。 |
| mysql_insert_id() | 返回上一個(gè)查詢?yōu)锳UTO_INCREMENT列生成的ID。 |
| mysql_kill() | 殺死給定的線程。 |
| mysql_library_end() | 最終確定MySQL C API庫(kù)。 |
| mysql_library_init() | 初始化MySQL C API庫(kù)。 |
| mysql_list_dbs() | 返回與簡(jiǎn)單正則表達(dá)式匹配的數(shù)據(jù)庫(kù)名稱。 |
| mysql_list_fields() | 返回與簡(jiǎn)單正則表達(dá)式匹配的字段名稱。 |
| mysql_list_processes() | 返回當(dāng)前服務(wù)器線程的列表。 |
| mysql_list_tables() | 返回與簡(jiǎn)單正則表達(dá)式匹配的表名。 |
| mysql_more_results() | 檢查是否還存在其他結(jié)果。 |
| mysql_next_result() | 在多語(yǔ)句執(zhí)行過(guò)程中返回/初始化下一個(gè)結(jié)果。 |
| mysql_num_fields() | 返回結(jié)果集中的列數(shù)。 |
| mysql_num_rows() | 返回結(jié)果集中的行數(shù)。 |
| mysql_options() | 為mysql_connect()設(shè)置連接選項(xiàng)。 |
| mysql_ping() | 檢查與服務(wù)器的連接是否工作,如有必要重新連接。 |
| mysql_query() | 執(zhí)行指定為“以Null終結(jié)的字符串”的SQL查詢。 |
| mysql_real_connect() | 連接到MySQL服務(wù)器。 |
| mysql_real_escape_string() | 考慮到連接的當(dāng)前字符集,為了在SQL語(yǔ)句中使用,對(duì)字符串中的特殊字符進(jìn)行轉(zhuǎn)義處理。 |
| mysql_real_query() | 執(zhí)行指定為計(jì)數(shù)字符串的SQL查詢。 |
| mysql_refresh() | 刷新或復(fù)位表和高速緩沖。 |
| mysql_reload() | 通知服務(wù)器再次加載授權(quán)表。 |
| mysql_rollback() | 回滾事務(wù)。 |
| mysql_row_seek() | 使用從mysql_row_tell()返回的值,查找結(jié)果集中的行偏移。 |
| mysql_row_tell() | 返回行光標(biāo)位置。 |
| mysql_select_db() | 選擇數(shù)據(jù)庫(kù)。 |
| mysql_server_end() | 最終確定嵌入式服務(wù)器庫(kù)。 |
| mysql_server_init() | 初始化嵌入式服務(wù)器庫(kù)。 |
| mysql_set_server_option() | 為連接設(shè)置選項(xiàng)(如多語(yǔ)句)。 |
| mysql_sqlstate() | 返回關(guān)于上一個(gè)錯(cuò)誤的SQLSTATE錯(cuò)誤代碼。 |
| mysql_shutdown() | 關(guān)閉數(shù)據(jù)庫(kù)服務(wù)器。 |
| mysql_stat() | 以字符串形式返回服務(wù)器狀態(tài)。 |
| mysql_store_result() | 檢索完整的結(jié)果集至客戶端。 |
| mysql_thread_id() | 返回當(dāng)前線程ID。 |
| mysql_thread_safe() | 如果客戶端已編譯為線程安全的,返回1。 |
| mysql_use_result() | 初始化逐行的結(jié)果集檢索。 |
| mysql_warning_count() | 返回上一個(gè)SQL語(yǔ)句的告警數(shù)。 |
C API預(yù)處理語(yǔ)句數(shù)據(jù)類型
MYSQL_STMT
該結(jié)構(gòu)表示預(yù)處理語(yǔ)句。通過(guò)調(diào)用mysql_stmt_init()創(chuàng)建語(yǔ)句,返回語(yǔ)句句柄,即指向MYSQL_STMT的指針。該句柄用戶所有后續(xù)的與語(yǔ)句有關(guān)的函數(shù),直至使用mysql_stmt_close()關(guān)閉了它為止。
MYSQL_BIND
該結(jié)構(gòu)用于語(yǔ)句輸入(發(fā)送給服務(wù)器的數(shù)據(jù)值)和輸出(從服務(wù)器返回的結(jié)果值)。對(duì)于輸入,它與mysql_stmt_bind_param()一起使用,用于將參數(shù)數(shù)據(jù)值綁定到緩沖區(qū)上,以供mysql_stmt_execute()使用。對(duì)于輸出,它與mysql_stmt_bind_result()一起使用,用于綁定結(jié)果緩沖區(qū),以便用于和mysql_stmt_fetch()以獲取行。
MYSQL_BIND結(jié)構(gòu):
enum enum_field_types buffer_type緩沖的類型。如下:
| buffer_type值 | SQL類型 | C類型 |
| MYSQL_TYPE_TINY | TINYINT | char |
| MYSQL_TYPE_SHORT | SMALLINT | short int |
| MYSQL_TYPE_LONG | INT | int |
| MYSQL_TYPE_LONGLONG | BIGINT | long long int |
| MYSQL_TYPE_FLOAT | FLOAT | float |
| MYSQL_TYPE_DOUBLE | DOUBLE | double |
| MYSQL_TYPE_TIME | TIME | MYSQL_TIME |
| MYSQL_TYPE_DATE | DATE | MYSQL_TIME |
| MYSQL_TYPE_DATETIME | DATETIME | MYSQL_TIME |
| MYSQL_TYPE_TIMESTAMP | TIMESTAMP | MYSQL_TIME |
| MYSQL_TYPE_STRING | CHAR | |
| MYSQL_TYPE_VAR_STRING | VARCHAR | |
| MYSQL_TYPE_TINY_BLOB | TINYBLOB/TINYTEXT | |
| MYSQL_TYPE_BLOB | BLOB/TEXT | |
| MYSQL_TYPE_MEDIUM_BLOB | MEDIUMBLOB/MEDIUMTEXT | |
| MYSQL_TYPE_LONG_BLOB | LONGBLOB/LONGTEXT |
void *buffer 對(duì)于輸入,這是指向存儲(chǔ)語(yǔ)句參數(shù)數(shù)據(jù)值的緩沖的指針。對(duì)于輸出,它是指向返回結(jié)果集列值的緩沖的指針。
unsigned long buffer_length *buffer的實(shí)際大小,單位為字節(jié)。
unsigned long *length 指向unsigned long變量的指針,該變量指明了存儲(chǔ)在*buffer中數(shù)據(jù)的實(shí)際字節(jié)數(shù)。
my_bool *is_null 該成員指向my_bool變量,如果值為NULL,該變量為“真”,如果值為非Null,該變量為“假”。
my_bool is_unsigned 該成員用于整數(shù)類型。
MYSQL_TIME結(jié)構(gòu):
unsigned int year年份
unsigned int month月份
unsigned int day天
unsigned int hour小時(shí)
unsigned int minute分鐘
unsigned int second秒
my_bool neg布爾標(biāo)志,用于指明時(shí)間是否為負(fù)數(shù)。
unsigned long second_part秒的分?jǐn)?shù)部分。該成員目前不使用。
C API 預(yù)處理語(yǔ)句函數(shù)
| 函數(shù) | 描述 |
|---|---|
| mysql_stmt_affected_rows() | 返回由預(yù)處理語(yǔ)句UPDATE、DELETE或INSERT變更、刪除或插入的行數(shù)目。 |
| mysql_stmt_attr_get() | 獲取預(yù)處理語(yǔ)句屬性的值。 |
| mysql_stmt_attr_set() | 設(shè)置預(yù)處理語(yǔ)句的屬性。 |
| mysql_stmt_bind_param() | 將應(yīng)用程序數(shù)據(jù)緩沖與預(yù)處理SQL語(yǔ)句中的參數(shù)標(biāo)記符關(guān)聯(lián)起來(lái)。 |
| mysql_stmt_bind_result() | 將應(yīng)用程序數(shù)據(jù)緩沖與結(jié)果集中的列關(guān)聯(lián)起來(lái)。 |
| mysql_stmt_close() | 釋放預(yù)處理語(yǔ)句使用的內(nèi)存。 |
| mysql_stmt_data_seek() | 尋找語(yǔ)句結(jié)果集中的任意行編號(hào)。 |
| mysql_stmt_errno() | 返回上次語(yǔ)句執(zhí)行的錯(cuò)誤編號(hào)。 |
| mysql_stmt_error() | 返回上次語(yǔ)句執(zhí)行的錯(cuò)誤消息。 |
| mysql_stmt_execute() | 執(zhí)行預(yù)處理語(yǔ)句。 |
| mysql_stmt_fetch() | 從結(jié)果集獲取數(shù)據(jù)的下一行,并返回所有綁定列的數(shù)據(jù)。 |
| mysql_stmt_fetch_column() | 獲取結(jié)果集當(dāng)前行中某列的數(shù)據(jù)。 |
| mysql_stmt_field_count() | 對(duì)于最近的語(yǔ)句,返回結(jié)果行的數(shù)目。 |
| mysql_stmt_free_result() | 釋放分配給語(yǔ)句句柄的資源。 |
| mysql_stmt_init() | 為MYSQL_STMT結(jié)構(gòu)分配內(nèi)存并初始化它。 |
| mysql_stmt_insert_id() | 對(duì)于預(yù)處理語(yǔ)句的AUTO_INCREMENT列,返回生成的ID。 |
| mysql_stmt_num_rows() | 從語(yǔ)句緩沖結(jié)果集返回總行數(shù)。 |
| mysql_stmt_param_count() | 返回預(yù)處理SQL語(yǔ)句中的參數(shù)數(shù)目。 |
| mysql_stmt_param_metadata() | 返回結(jié)果集的參數(shù)元數(shù)據(jù)。 |
| mysql_stmt_prepare() | 為執(zhí)行操作準(zhǔn)備SQL字符串。 |
| mysql_stmt_reset() | 復(fù)位服務(wù)器中的語(yǔ)句緩沖區(qū)。 |
| mysql_stmt_result_metadata() | 以結(jié)果集形式返回預(yù)處理語(yǔ)句元數(shù)據(jù)。 |
| mysql_stmt_row_seek() | 使用從mysql_stmt_row_tell()返回的值,查找語(yǔ)句結(jié)果集中的行偏移。 |
| mysql_stmt_row_tell() | 返回語(yǔ)句行光標(biāo)位置。 |
| mysql_stmt_send_long_data() | 將程序塊中的長(zhǎng)數(shù)據(jù)發(fā)送到服務(wù)器。 |
| mysql_stmt_sqlstate() | 返回關(guān)于上次語(yǔ)句執(zhí)行的SQLSTATE錯(cuò)誤代碼。 |
| mysql_stmt_store_result() | 將完整的結(jié)果集檢索到客戶端。 |
調(diào)用mysql_stmt_init()以創(chuàng)建語(yǔ)句句柄,然后調(diào)用mysql_stmt_prepare準(zhǔn)備語(yǔ)句,調(diào)用mysql_stmt_bind_param()提供參數(shù)數(shù)據(jù),并調(diào)用mysql_stmt_execute()執(zhí)行語(yǔ)句。通過(guò)更改mysql_stmt_bind_param()提供的相應(yīng)緩沖區(qū)中的參數(shù)值,可重復(fù)執(zhí)行mysql_stmt_execute()。
mysql_stmt_store_result()與mysql_stmt_result_metadata()的區(qū)別:一個(gè)是獲取全部結(jié)果集,一個(gè)是獲取結(jié)果集元數(shù)據(jù)。