2022-08-31MYSQL C API 庫接口

ps:來自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ù)庫的名稱问芬,由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ù)庫名的長(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來確定最大長(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()宏來測(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ù)庫。
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ù)庫潜慎。該函數(shù)已不再被重視捡多,使用SQL語句CREATE DATABASE取而代之。
mysql_data_seek() 在查詢結(jié)果集中查找屬性行編號(hào)铐炫。
mysql_debug() 用給定的字符串執(zhí)行DBUG_PUSH垒手。
mysql_drop_db() 撤銷數(shù)據(jù)庫。該函數(shù)已不再被重視驳遵,使用SQL語句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語句中,對(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í)行語句的結(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庫秫逝。
mysql_library_init() 初始化MySQL C API庫。
mysql_list_dbs() 返回與簡(jiǎn)單正則表達(dá)式匹配的數(shù)據(jù)庫名稱询枚。
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() 在多語句執(zhí)行過程中返回/初始化下一個(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語句中使用缓呛,對(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ù)庫。
mysql_server_end() 最終確定嵌入式服務(wù)器庫以故。
mysql_server_init() 初始化嵌入式服務(wù)器庫涡拘。
mysql_set_server_option() 為連接設(shè)置選項(xiàng)(如多語句)。
mysql_sqlstate() 返回關(guān)于上一個(gè)錯(cuò)誤的SQLSTATE錯(cuò)誤代碼据德。
mysql_shutdown() 關(guān)閉數(shù)據(jù)庫服務(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語句的告警數(shù)。

C API預(yù)處理語句數(shù)據(jù)類型

MYSQL_STMT

該結(jié)構(gòu)表示預(yù)處理語句茅郎。通過調(diào)用mysql_stmt_init()創(chuàng)建語句蜗元,返回語句句柄,即指向MYSQL_STMT的指針系冗。該句柄用戶所有后續(xù)的與語句有關(guān)的函數(shù)奕扣,直至使用mysql_stmt_close()關(guān)閉了它為止。

MYSQL_BIND

該結(jié)構(gòu)用于語句輸入(發(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ǔ)語句參數(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ù)處理語句函數(shù)

函數(shù) 描述
mysql_stmt_affected_rows() 返回由預(yù)處理語句UPDATE坊秸、DELETE或INSERT變更麸祷、刪除或插入的行數(shù)目。
mysql_stmt_attr_get() 獲取預(yù)處理語句屬性的值褒搔。
mysql_stmt_attr_set() 設(shè)置預(yù)處理語句的屬性阶牍。
mysql_stmt_bind_param() 將應(yīng)用程序數(shù)據(jù)緩沖與預(yù)處理SQL語句中的參數(shù)標(biāo)記符關(guān)聯(lián)起來。
mysql_stmt_bind_result() 將應(yīng)用程序數(shù)據(jù)緩沖與結(jié)果集中的列關(guān)聯(lián)起來星瘾。
mysql_stmt_close() 釋放預(yù)處理語句使用的內(nèi)存走孽。
mysql_stmt_data_seek() 尋找語句結(jié)果集中的任意行編號(hào)。
mysql_stmt_errno() 返回上次語句執(zhí)行的錯(cuò)誤編號(hào)琳状。
mysql_stmt_error() 返回上次語句執(zhí)行的錯(cuò)誤消息磕瓷。
mysql_stmt_execute() 執(zhí)行預(yù)處理語句。
mysql_stmt_fetch() 從結(jié)果集獲取數(shù)據(jù)的下一行算撮,并返回所有綁定列的數(shù)據(jù)生宛。
mysql_stmt_fetch_column() 獲取結(jié)果集當(dāng)前行中某列的數(shù)據(jù)。
mysql_stmt_field_count() 對(duì)于最近的語句肮柜,返回結(jié)果行的數(shù)目。
mysql_stmt_free_result() 釋放分配給語句句柄的資源倒彰。
mysql_stmt_init() 為MYSQL_STMT結(jié)構(gòu)分配內(nèi)存并初始化它审洞。
mysql_stmt_insert_id() 對(duì)于預(yù)處理語句的AUTO_INCREMENT列,返回生成的ID待讳。
mysql_stmt_num_rows() 從語句緩沖結(jié)果集返回總行數(shù)芒澜。
mysql_stmt_param_count() 返回預(yù)處理SQL語句中的參數(shù)數(shù)目。
mysql_stmt_param_metadata() 返回結(jié)果集的參數(shù)元數(shù)據(jù)创淡。
mysql_stmt_prepare() 為執(zhí)行操作準(zhǔn)備SQL字符串痴晦。
mysql_stmt_reset() 復(fù)位服務(wù)器中的語句緩沖區(qū)。
mysql_stmt_result_metadata() 以結(jié)果集形式返回預(yù)處理語句元數(shù)據(jù)琳彩。
mysql_stmt_row_seek() 使用從mysql_stmt_row_tell()返回的值誊酌,查找語句結(jié)果集中的行偏移部凑。
mysql_stmt_row_tell() 返回語句行光標(biāo)位置。
mysql_stmt_send_long_data() 將程序塊中的長(zhǎng)數(shù)據(jù)發(fā)送到服務(wù)器碧浊。
mysql_stmt_sqlstate() 返回關(guān)于上次語句執(zhí)行的SQLSTATE錯(cuò)誤代碼涂邀。
mysql_stmt_store_result() 將完整的結(jié)果集檢索到客戶端。

調(diào)用mysql_stmt_init()以創(chuàng)建語句句柄箱锐,然后調(diào)用mysql_stmt_prepare準(zhǔn)備語句比勉,調(diào)用mysql_stmt_bind_param()提供參數(shù)數(shù)據(jù),并調(diào)用mysql_stmt_execute()執(zhí)行語句驹止。通過更改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)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市捞镰,隨后出現(xiàn)的幾起案子闸与,更是在濱河造成了極大的恐慌,老刑警劉巖岸售,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件践樱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡凸丸,警方通過查閱死者的電腦和手機(jī)拷邢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來屎慢,“玉大人瞭稼,你說我怎么就攤上這事∧寤荩” “怎么了环肘?”我有些...
    開封第一講書人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)集灌。 經(jīng)常有香客問我悔雹,道長(zhǎng),這世上最難降的妖魔是什么欣喧? 我笑而不...
    開封第一講書人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任腌零,我火速辦了婚禮,結(jié)果婚禮上唆阿,老公的妹妹穿的比我還像新娘益涧。我一直安慰自己,他們只是感情好驯鳖,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開白布闲询。 她就那樣靜靜地躺著久免,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嘹裂。 梳的紋絲不亂的頭發(fā)上妄壶,一...
    開封第一講書人閱讀 49,985評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音寄狼,去河邊找鬼丁寄。 笑死,一個(gè)胖子當(dāng)著我的面吹牛泊愧,可吹牛的內(nèi)容都是我干的伊磺。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼删咱,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼屑埋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起痰滋,我...
    開封第一講書人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤摘能,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后敲街,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體团搞,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年多艇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了逻恐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡峻黍,死狀恐怖复隆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情姆涩,我是刑警寧澤挽拂,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站骨饿,受9級(jí)特大地震影響轻局,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜样刷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望览爵。 院中可真熱鬧置鼻,春花似錦、人聲如沸蜓竹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至嘶是,卻和暖如春钙勃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背聂喇。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來泰國打工辖源, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人希太。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓克饶,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親誊辉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子矾湃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容