C語言連線mysql資料庫

2021-08-06 05:27:49 字數 4268 閱讀 1394

一: 分配或初始化與mysql_real_connect()相適應的mysql物件。用mysql_init()函式。

mysql *mysql_init(mysql *mysql)
描述 :

分配或初始化與mysql_real_connect()相適應的mysql物件。如果mysql是null指標,該函式將分配、初始化、並返回新物件。否則,將初始化物件,並返回物件的位址。如果mysql_init()分配了新的物件,當呼叫mysql_close()來關閉連線時。將釋放該物件。

返回值

初始化的mysql*控制代碼。如果無足夠記憶體以分配新的物件,返回null。

錯誤 在記憶體不足的情況下,返回null。

二:連線資料庫引擎,通過函式mysql_real_connect()嘗試與執行在主機上的mysql資料庫引擎建立連線。

mysql *mysql_real_connect(mysql *mysql, const

char *host, const

char *user, const

char *passwd, const

char *db, unsigned

int port, const

char *unix_socket, unsigned

long client_flag)

描述:

mysql_real_connect()嘗試與執行在主機上的mysql資料庫引擎建立連線。在你能夠執行需要有效mysql連線控制代碼結構的任何其他api函式之前,mysql_real_connect()必須成功完成。

引數的指定方式如下:

· 第1個引數應是已有mysql結構的位址。呼叫mysql_real_connect()之前,必須呼叫mysql_init()來初始化mysql結構。通過mysql_options()呼叫,可更改多種連線選項。請參見25.2.3.48節,「mysql_options()」。

· 「host」的值必須是主機名或ip位址。如果「host」是null或字串」localhost」,連線將被視為與本地主機的連線。如果作業系統支援套接字(unix)或命名管道(windows),將使用它們而不是tcp/ip連線到伺服器。

· 「user」引數包含使用者的mysql登入id。如果「user」是null或空字串」「,使用者將被視為當前使用者。在unix環境下,它是當前的登入名。在windows odbc下,必須明確指定當前使用者名稱。請參見26.1.9.2節,「在windows上配置myodbc dsn」。

· 「passwd」引數包含使用者的密碼。如果「passwd」是null,僅會對該使用者的(擁有1個空密碼欄位的)使用者表中的條目進行匹配檢查。這樣,資料庫管理員就能按特定的方式設定mysql許可權系統,根據使用者是否擁有指定的密碼,使用者將獲得不同的許可權。

注釋:呼叫mysql_real_connect()之前,不要嘗試加密密碼,密碼加密將由客戶端api自動處理。

· 「db」是資料庫名稱。如果db為null,連線會將預設的資料庫設為該值。

· 如果「port」不是0,其值將用作tcp/ip連線的埠號。注意,「host」引數決定了連線的型別。

· 如果unix_socket不是null,該字串描述了應使用的套接字或命名管道。注意,「host」引數決定了連線的型別。

· client_flag的值通常為0,但是,也能將其設定為下述標誌的組合,以允許特定功能:

返回值

如果連線成功,返回mysql*連線控制代碼。如果連線失敗,返回null。對於成功的連線,返回值與第1個引數的值相同。

三:查詢資料庫中的某乙個表內容,通過函式mysql_query()來實現。

int mysql_query(connect, "select * from dept);
描述

執行由「null終結的字串」查詢指向的sql查詢。正常情況下,字串必須包含1條sql語句,而且不應為語句新增終結分號(『;』)或「\g」。如果允許多語句執行,字串可包含多條由分號隔開的語句。請參見25.2.9節,「多查詢執行的c api處理」。

mysql_query()不能用於包含二進位制資料的查詢,應使用mysql_real_query()取而代之(二進位制資料可能包含字元『\0』,mysql_query()會將該字元解釋為查詢字串結束)。

如果希望了解查詢是否應返回結果集,可使用mysql_field_count()進行檢查。請參見25.2.3.22節,「mysql_field_count()」。

返回值

如果查詢成功,返回0。如果出現錯誤,返回非0值。

四:顯示查詢資料庫中資料表的內容,mysql_store_result()將mysql_query()查詢的全部結果讀取到客戶端,分配1個mysql_res結構,並將結果置於該結構中。

此時應該注意,查詢的結果有可能是多行。

應該呼叫函式mysql_field_count()返回表的列數。

可以呼叫函式mysql_fetch_row()來獲取多行結果的一行內容。

可以通過函式mysql_fetch_fields()來獲取表頭的內容。

mysql_res *mysql_store_result(mysql *mysql)
描述

對於成功檢索了資料的每個查詢(select、show、describe、explain、check table等),必須呼叫mysql_store_result()或mysql_use_result() 。

對於其他查詢,不需要呼叫mysql_store_result()或mysql_use_result(),但是如果在任何情況下均呼叫了mysql_store_result(),它也不會導致任何傷害或效能降低。通過檢查mysql_store_result()是否返回0,可檢測查詢是否沒有結果集(以後會更多)。

如果希望了解查詢是否應返回結果集,可使用mysql_field_count()進行檢查。請參見25.2.3.22節,「mysql_field_count()」。

mysql_store_result()將查詢的全部結果讀取到客戶端,分配1個mysql_res結構,並將結果置於該結構中。

如果查詢未返回結果集,mysql_store_result()將返回null指標(例如,如果查詢是insert語句)。

如果讀取結果集失敗,mysql_store_result()還會返回null指標。通過檢查mysql_error()是否返回非空字串,mysql_errno()是否返回非0值,或mysql_field_count()是否返回0,可以檢查是否出現了錯誤。

如果未返回行,將返回空的結果集。(空結果集設定不同於作為返回值的空指標)。

一旦呼叫了mysql_store_result()並獲得了不是null指標的結果,可呼叫mysql_num_rows()來找出結果集中的行數。

可以呼叫mysql_fetch_row()來獲取結果集中的行,或呼叫mysql_row_seek()和mysql_row_tell()來獲取或設定結果集中的當前行位置。

一旦完成了對結果集的操作,必須呼叫mysql_free_result()。

請參見25.2.13.1節,「為什麼在mysql_query()返回成功後,mysql_store_result()有時會返回null」.

返回值

具有多個結果的mysql_res結果集合。如果出現錯誤,返回null。

五:釋放記憶體,釋放由mysql_store_result()、mysql_use_result()、mysql_list_dbs()等為結果集分配的記憶體。

void mysql_free_result(mysql_res *result)
描述 :釋放由mysql_store_result()、mysql_use_result()、mysql_list_dbs()等為結果集分配的記憶體。完成對結果集的操作後,必須呼叫mysql_free_result()釋放結果集使用的記憶體。

釋放完成後,不要嘗試訪問結果集。

六:關閉前面開啟的mysql連線。

[plain] view plain copy

void mysql_close(mysql *mysql)
描述

關閉前面開啟的連線。如果控制代碼是由mysql_init()或mysql_connect()自動分配的,mysql_close()還將解除分配由mysql指向的連線控制代碼。

本文借鑑:

C語言連線MySQL資料庫

不想用odbc什麼的連線資料庫,想直接用mysql提供的介面連線資料庫。我用的是vs2005。網上的一些介紹都是修改專案屬性等的設定,我不喜歡那樣。首先 我們需要的檔案有mysql.h my alloc.h my list.h mysql com.h mysql time.h mysql versi...

C語言連線mysql資料庫

作業系統是linux,需要mysql客戶端軟體開發庫libmysqlclient,這個函式庫是mysql的組成部分之一。一般標頭檔案都在 usr include mysql路徑下,庫檔案都在 usr lib mysql路徑下。如果沒有需要安裝mysql devel包 mysql devel 5.1....

C語言連線MYSQL資料庫

1 初始化 mysql mysql mysql init null 描述分配或初始化與mysql real connect 相適應的mysql物件。如果mysql是null指標,該函式將分配 初始化 並返回新物件。否則,將初始化物件,並返回物件的位址。如果mysql init 分配了新的物件,當呼叫...