用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 使用環境變...