mysql 數據庫接口

通常步驟是:mysql

1.調用mysql_init()初始化MYSQL結構,許多的函數執行須要這個結構體。sql

2.調用mysql_real_connect()鏈接數據庫,參數中涉及到數據庫名,數據庫登陸名,數據庫密碼等等。數據庫

3.調用mysql_real_query()執行一條Select SQL語句,經過mysql_store_result()的返回值得到Select的結果,返回的結果就是一個MYSQL_RES結構的指針。數組

4.調用mysql_fetch_row()得到一條記錄,函數的返回值是MYSQL_ROW對象,這是一個char二維數組。獲取一條記錄之後,mysql_fetch_row會將遊標自動向下移動一條記錄。服務器

5.調用mysql_free_result()釋放結果資源,調用mysql_close關閉鏈接。dom

 

1.mysql_sqlstate
const char *mysql_sqlstate(MYSQL *mysql)socket

描述
返回由Null終結的字符串,該字符串包含關於上次錯誤的SQLSTATE錯誤代碼。錯誤代碼包含5個字符。'00000'表示無錯誤。其值由ANSI SQL和ODBC指定。函數

注意:並不是全部的MySQL錯誤均會被映射到SQLSTATE錯誤代碼。值'HY000'(通常錯誤)用於未映射的錯誤。fetch

返回值
包含SQLSTATE錯誤碼的、由Null終結的字符串。this

 

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, // 若是unix_socket不是NULL,該字符串描述了應使用的套接字或命名管道。注意,「host」參數決定了鏈接的類型。
  unsigned long client_flag // 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(加密協議)。該選項不該由應用程序設置,它是在客戶端庫內部設置的。

如:

if ( ! mysql_real_connect
(
m_pMySql,
m_pszIPAddress, // localhost
m_pszUserName,  // root
m_pszUserPassword, // 1234
m_pszDatabaseName,  // mytestdb
0,
NULL,
CLIENT_MULTI_STATEMENTS | CLIENT_MULTI_RESULTS/*CLIENT_LOCAL_FILES*/)
)

 

3.mysql_set_character_set 爲當前鏈接設置默認的字符集

該函數用於爲當前鏈接設置默認的字符集。字符串csname指定了1個有效的字符集名稱。鏈接校對成爲字符集的默認校對。該函數的工做方式與SET NAMES語句相似,但它還能設置mysql->charset的值,從而影響了由mysql_real_escape_string()設置的字符集。該函數是在MySQL 5.0.7中增長的。

返回:

該函數0表示成功,非0值表示出現錯誤。

如: mysql_set_character_set( m_pMySql, "utf8");

 

4.mysql_ping 

int mysql_ping(MYSQL *mysql)

Ping 一個服務器鏈接,若是沒有鏈接則從新鏈接。
若是存在鏈接,則返回 true。若是失敗,則返回 false。

 

5.mysql_query 發送一條 MySQL 查詢

int mysql_query(MYSQL *mysql, const char *sqlcmd)

若是沒有打開的鏈接,本函數會嘗試無參數調用 mysql_connect() 函數來創建一個鏈接並使用之。

返回值:

成功返回TRUE,失敗返回FALSE。 // random中 if(mysql_query(... , ...) ){出錯處理;} // 是否搞反了???

 

6.mysql_store_result 

MYSQL_RES *mysql_store_result(MYSQL *mysql)

在使用 mysql_query() 進行一次查詢後,通常要用這兩個函數之一來把結果存到一個 MYSQL_RES * 變量中。 

 

mysql_use_result 與 mysql_store_result 的區別:

mysql_use_result() 的結果必須「一次性用完」,也就是說用它獲得一個 result 後,必須反覆用 mysql_fetch_row() 讀取其結果直至該函數返回 null 爲止,不然若是你再次進行 mysql 查詢,會獲得 「Commands out of sync; you can't run this command now」 的錯誤。

mysql_store_result() 獲得 result 是存下來的,你無需把所有行結果讀完,就能夠進行另外的查詢。好比你進行一個查詢,獲得一系列記錄,再根據這些結果,用一個循環再進行數據庫查詢,就只能用 mysql_store_result() 。 

返回值
具備多個結果的MYSQL_RES結果集合。若是出現錯誤,返回NULL。

如:

MYSQL_RES *_Result;
MYSQL_ROW _Row;

_Result = mysql_store_result(m_pMySql);
_iFields = mysql_num_fields(_Result);

while ( ( _Row = mysql_fetch_row( _Result ) ) )
{

  ...

}

額外:關於mysql_store_result的使用: http://my.oschina.net/moooofly/blog/186456

 

7.mysql_num_fields 獲取結果中列的個數

若是失敗,則返回 false。

_iFields = mysql_num_fields(_Result); // MYSQL_RES *_Result; int _iFields;

 

8.mysql_fetch_row

MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)

得到一條記錄,函數的返回值是MYSQL_ROW對象,這是一個char二維數組。獲取一條記錄之後,mysql_fetch_row會將遊標自動向下移動一條記錄。

當在mysql_store_result()以後使用時,若是沒有更多的行可檢索時,mysql_fetch_row()返回NULL。

 

9.mysql_free_result

釋放結果內存

若是成功,則返回 true,若是失敗,則返回 false。

 

10.mysql_error

函數返回上一個 MySQL 操做產生的文本錯誤信息。

本函數返回上一個 MySQL 函數的錯誤文本,若是沒有出錯則返回 ''(空字符串)。

 

11.mysql_close

當你從數據庫獲取了數據後,還要對這些數據進行復雜運算加工時(確定很耗時間)
這時就應關閉數據庫鏈接,以便其餘人使用

或者 mysql_query查詢完,就調用mysql_close是個很好的習慣。

相關文章
相關標籤/搜索