linux C程式設計 MYSQL函式庫

2021-06-16 13:21:06 字數 4466 閱讀 1895

用c語言連線mysql資料庫有兩個步驟:

1)初始化乙個連線控制代碼結構

2)建立連線

初始化乙個連線控制代碼結構

函式原型:

mysql *mysql_init(mysql * mysql);

引數說明:

mysql:為null,則分配乙個(返回其指標)。或按照傳入的結構指標進行初始化。

mysql:返回值,若為null表示出錯。

兩種常用的方法:

mysql my_connection;

mysql_init(&my_connection);//以引數傳出

或者mysql *conn_ptr;

conn_ptr = mysql_init(null);//以返回值傳出

可用於設定額外的連線選項,並影響連線的行為。一次設定乙個,可多次呼叫該函式來設定數個選項。

應在mysql_init()之後、以及mysql_connect()或mysql_real_connect()之前呼叫mysql_options()。

函式原型:

int mysql_options(mysql *mysql, enum mysql_option option, const char *arg);

引數說明:

int:返回值,該函式成功時返回0。如果使用了未知選項,返回非0值。

與資料庫建立連線。

函式原型:

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)

引數說明:

user:引數包含使用者的mysql登入id。如果「user」是null或空字串"",使用者將被視為當前使用者。在unix環境下,它是當前的登入名。

passwd:引數包含使用者的密碼。如果「passwd」是null,僅會對該使用者的(擁有1個空密碼欄位的)使用者表中的條目進行匹配檢查。

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

port:若不是0,其值將用作tcp/ip連線的埠號。

unix_socket:若不是null,該字串描述了應使用的套接字或命名管道。

client_flag:的值通常為0。

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

關閉資料庫連線

函式原型:

void mysql_close(mysql *connection);

引數說明:

函式原型:

const char *mysql_error(mysql *mysql)

常用結構:

if(mysql_errno(&mysql))

函式原型:

unsigned int mysql_errno(mysql *mysql)

引數說明:

int:對於由mysql指定的連線,mysql_errno()返回最近呼叫的api函式的錯誤**,該函式呼叫可能成功也可能失敗。「0」返回值表示未出現錯誤。

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

函式原型:

int mysql_query(mysql *mysql, const char *query)

引數說明:

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

2.8 函式mysql_real_query

返回上次update更改的行數,上次delete刪除的行數,或上次insert語句插入的行數。對於update、delete或insert語句,可在mysql_query()後立刻呼叫。對於select語句,mysql_affected_rows()的工作方式與mysql_num_rows()類似。

函式原型:

my_ulonglong mysql_affected_rows(mysql *mysql)

引數說明:

my_ulonglong:大於0的整數表明受影響或檢索的行數。「0」表示update語句未更新記錄,在查詢中沒有與where匹配的行,或未執行查詢。「-1」表示查詢返回錯誤

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

mysql_use_result()將初始化結果集檢索,但並不像mysql_store_result()那樣將結果集實際讀取到客戶端。它必須通過對mysql_fetch_row()的呼叫,對每一行分別進行檢索。這將直接從伺服器讀取結果,而不會將其儲存在臨時表或本地緩衝區內,與mysql_store_result()相比,速度更快而且使用的記憶體也更少。客戶端僅為當前行和通訊緩衝區分配記憶體,分配的記憶體可增加到max_allowed_packet位元組。

使用mysql_use_result()時,必須執行mysql_fetch_row(),直至返回null值,否則,未獲取的行將作為下乙個檢索的一部分返回。

函式原型:

mysql_res *mysql_use_result(mysql *mysql)

示例**:

mysql_res * res_ptr = mysql_use_result(&my_connection);

mysql_row sqlrow;

if (res_ptr)

mysql_free_result(res_ptr);

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

函式原型:

mysql_res *mysql_store_result(mysql *mysql)

檢索結果集的下一行。在mysql_store_result()之後使用時,如果沒有要檢索的行,mysql_fetch_row()返回null。在mysql_use_result()之後使用時,如果沒有要檢索的行或出現了錯誤,mysql_fetch_row()返回null。

函式原型:

mysql_row mysql_fetch_row(mysql_res *result)

函式原型:

mysql_row mysql_fetch_row(mysql_res *result)

#include #include #include "mysql.h"

int main(int argc, char *argv)

//mysql_real_connect()

conn_ptr = mysql_real_connect(conn_ptr, "127.0.0.1", "root", "","shellge", 0, null, 0);

if (conn_ptr) else

//mysql_close()

mysql_close(conn_ptr);

return exit_success;

}

linux C程式設計 popen函式詳解

include stdio.h file popen const char command,const char type int pclose file stream popen 函式 用 建立管道 的 方式 啟動 乙個 程序,並呼叫 shell.因為 管道 是被定義成 單向的,所以 type 引...

Linux C程式設計 exec函式簇

exec函式簇 在 linux 中程序要使用exec函式族 來啟動另乙個程式的執行 系統呼叫execve 對當前程序進行替換,替換者為乙個指定的程式,其引數包括檔名 filename 引數列表 argv 以及環境變數 envp exec函式族當然不止乙個,但它們大致相同,在 linux中,它們分別是...

linux c 程式設計 exec函式族

1.描述 exec 函式族將當前程序映像替換為新的程序映像,程序id不變。2.規律 exec函式族名字很相近,使用起來也很相近,它們的一般規律如下 l list 命令列引數列表 p path 搜素file時使用path變數 v vector 使用命令列引數陣列 e environment 使用環境變...