c++操作mysql – 串連

來源:互聯網
上載者:User

c++串連mysql的主要是通過mysql的c API來實現 。

串連的API有兩個,下面會分別描述:

 

1. mysql_connect()

 

(原型)ProtoType:  MYSQL *mysql_connect(MYSQL *mysql, const char *host, const char *user,
const char *passwd)

描述:

該函數已淘汰。最好使用mysql_real_connect()取而代之。

 

mysql_connect()試圖建立與運行在主機(遠程主機也可以)上的MySQL資料庫引擎的串連。在能夠執行任何其他API函數之前,必須先調用mysql_connect(),而且返回成功。但mysql_get_client_info()例外。

 

這些參數的意義與mysql_real_connect()的對應參數的意義相同,差別在於串連控制代碼可以為NULL。在這種情況下,C
API將自動為串連結構分配記憶體,併當調用mysql_close()時釋放分配的記憶體。該方法的缺點是,如果串連失敗,你無法檢索錯誤訊息。要想從mysql_errno()或mysql_error()獲得錯誤訊息,必須提供有效MYSQL指標。

 

傳回值: NULL表示失敗。反之成功。

 

2. mysql_real_connect()

原型:

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()調用,可更改多種串連選項。

·       

   host的值必須是主機名稱或IP地址。如果host是NULL或字串"localhost",串連將被視為與本地主機的串連。如果作業系統支援通訊端(Unix)或具名管道(Windows),將使用它們而不是TCP/IP串連到伺服器。

·        

   user參數包含使用者的MySQL登入ID。如果user是NULL或Null 字元串"",使用者將被視為目前使用者。在UNIX環境下,它是當前的登入名稱。在Windows
ODBC下,必須明確指定目前使用者名。請參見26.1.9.2節,“在Windows上配置MyODBC DSN”。

·        

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

注釋:調用mysql_real_connect()之前,不要嘗試加密密碼,密碼加密將由用戶端API自動處理。

·        

  db是資料庫名稱。如果db為NULL,串連會將預設的資料庫設為該值。當你不想串連特定資料庫時,可以指定db為NULL

·        

如果“port”不是0,其值將用作TCP/IP串連的連接埠號碼。注意,“host”參數決定了串連的類型。port為0的話,使用mysql的預設tcp/ip連接埠3306.

·   

如果unix_socket不是NULL,該字串描述了應使用的通訊端或具名管道。注意,“host”參數決定了串連的類型。

 

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

 

標誌名稱

標誌描述

CLIENT_COMPRESS

使用壓縮協議。

CLIENT_FOUND_ROWS

返回傳現的行數(匹配的),而不是受影響的行數。

CLIENT_IGNORE_SPACE

允許在函數名後使用空格。使所有的函數名成為保留字。

CLIENT_INTERACTIVE

關閉串連之前,允許interactive_timeout(取代了wait_timeout)秒的不啟用時間。用戶端的會話wait_timeout變數被設為會話interactive_timeout變數的值。

CLIENT_LOCAL_FILES

允許LOAD DATA LOCAL處理功能。

CLIENT_MULTI_STATEMENTS

通知伺服器,用戶端可能在單個字串內發送多條語句(由‘;’隔開)。如果未設定該標誌,將禁止多語句執行。

CLIENT_MULTI_RESULTS

通知伺服器,用戶端能夠處理來自多語句執行或儲存程式的多個結果集。如果設定了CLIENT_MULTI_STATEMENTS,將自動化佈建它。

CLIENT_NO_SCHEMA

禁止db_name.tbl_name.col_name文法。它用於ODBC。如果使用了該文法,它會使剖析器建置錯誤,在捕獲某些ODBC程式中的缺陷時,它很有用。

CLIENT_ODBC

用戶端是ODBC用戶端。它將mysqld變得更為ODBC友好。

CLIENT_SSL

使用SSL(加密協議)。該選項不應由應用程式設定,它是在用戶端庫內部設定的。

範例程式碼:mysql_init(&mysql);
if (!mysql_real_connect(&mysql, "host", "user", "passwd", "database", 0, NULL, 0))
{//判斷串連是否失敗。 
    printf("Failed to connect to database: Error: %s/n",  mysql_error(&mysql));
}
串連成功後,你就可以執行其他動作了。mysql_connect和mysql_real_connect的區別:1. mysql_connect不需要調用mysql_init來初始化串連控制代碼.但是mysql_real_connect需要。2. mysql_connect只能指定host,user,password, database四個參數,無法指定特定連接埠,使用具名管道。只能使用預設的TCP/IP串連。預設連接埠只能是33063. mysql_connect在實現裡調用了mysql_real_connect.是對其的封裝。我們可以從庫的實現檔案libmysql.c看到mysql_connect()函數的實現:MYSQL * STDCALLmysql_connect(MYSQL *mysql,const char *host, const char *user, const char *passwd){  MYSQL *res;  mysql=mysql_init(mysql);/* Make it thread safe */  {    DBUG_ENTER("mysql_connect");    if (!(res = mysql_real_connect(mysql, host, user, passwd, null, 0, null, 0)))   {      if (mysql->free_me)my_free((gptr) mysql,MYF(0));    }
    DBUG_RETURN(res);  }}mysql_real_connect的實現就很長很複雜了。在此不貼出,有需要的同學可通過向我索取。通過這兩個函數,大家想必對mysql的串連都更多的瞭解了。在實際運用過程中,這兩個函數已經夠用了。還有需要用到的是mysql_options來通過更改串連選項。備忘:本文函數說明來自mysql5.1官方文檔。所需資料均來自mysql。如有不對的地方,歡迎批評指正。作者連絡方式:bicheng.gui@gmail.com
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.