初學MySQL,記錄一下MySQL用c語言編程時遇到的問題。
這是我的源程序:
1 int main( void ) 2 { 3 MYSQL *mysql= NULL; 4 5 6 if ((mysql=mysql_init(mysql))== NULL) 7 { 8 fprintf(stderr, " Cannot initialize MySQL " ); 9 return 1 ; 10 } 11 if (mysql_real_connect(mysql, " localhost " , " kerry " , " beck123 " ,NULL, 0 ,NULL, 0 )== NULL) 12 { 13 fprintf(stderr, " %d:%s \n " ,mysql_errno(mysql),mysql_error(mysql)); 14 return 1 ; 15 } 16 printf( " Succeed!\n " ); 17 return 0 ; 18 }
?
MySQL的c API有幾個重要的數(shù)據(jù)類型:
-
?MYSQL
該結(jié)構(gòu)代表 1 個數(shù)據(jù)庫連接的句柄。幾乎所有的 MySQL 函數(shù)均使用它。不應嘗試拷貝 MYSQL 結(jié)構(gòu)。不保證這類拷貝結(jié)果會有用
-
該結(jié)構(gòu)代表返回行的查詢結(jié)果( SELECT ,? SHOW ,? DESCRIBE ,? EXPLAIN )。在本節(jié)的剩余部分,將查詢返回的信息稱為“結(jié)果集”。
-
這是 1 行數(shù)據(jù)的“類型安全”表示。它目前是按照計數(shù)字節(jié)字符串的數(shù)組實施的。(如果字段值可能包含二進制數(shù)據(jù),不能將其當作 由Null 終結(jié)的字符串對待,這是因為這類值可能會包含 Null 字節(jié))。行是通過調(diào)用 mysql_fetch_row() 獲得的。
-
該結(jié)構(gòu)包含關(guān)于字段的信息,如字段名、類型和大小。這里詳細介紹了其成員。通過重復調(diào)用 mysql_fetch_field() ,可為每個字段獲得 MYSQL_FIELD 結(jié)構(gòu)。字段值不是該結(jié)構(gòu)的組成部份,它們包含在 MYSQL_ROW 結(jié)構(gòu)中。
-
這是 MySQL 字段列表偏移量的“類型安全”表示(由 mysql_field_seek() 使用 )。偏移量是行內(nèi)的字段編號,從 0 開始。
聲明“MYSQL *mysql=NULL;“,必須為該指針賦值為NULL。如果定義為"MYSQL *mysql;",不為該指針賦值,就會生成野指針,程序運行時會發(fā)生“段錯誤 (核心已轉(zhuǎn)儲)“錯誤。
“野指針”不是NULL指針,是指向“垃圾”內(nèi)存(不可用內(nèi)存)的指針。人們一般不會錯用NULL指針,因為用if語句很容易判斷。但是“野指針”是很危險的,if無法判斷一個指針是正常指針還是“野指針”。有個良好的編程習慣是避免“野指針”的唯一方法。
?
調(diào)用mysql_init()函數(shù),該函數(shù)會 分配或初始化與 mysql_real_connect() 相適應的 MYSQL 對象。 如果 mysql 是 NULL 指針, 該函數(shù)將分配、初始化、并返回新對象。否則,將初始化對象,并返回對象的地址。如果 mysql_init() 分配了新的對象,當調(diào)用 mysql_close() 來關(guān)閉連接時。將釋放該對象。
?
更多文章、技術(shù)交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
