通常步驟是: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是個很好的習慣。