2022-08-31MYSQL C API 庫(kù)接口

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ù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容