MYSQL * mysql_init(MYSQL *);通常傳遞NULL給這個例程,他會返回一個指向新分配的連接句柄結構的指針。如果傳遞一個已有的結構,它將會重新初始化。這個例程在出錯時返回NULL.
MYSQL* mysql_real_connect(MYSQL* connection, const char *server_host, const char *sql_user_name, const char *sql_password, const char *db_name, unsigned int port_number, const char *unix_socket_name, unsigned int flags);
指針connection必須指向已經被mysql_init初始化過的結構。
注意server_host既可以是主機名,也可以是IP地址。如果連接本地,可以制定localhost來優化。
sql_user_name和sql_password的含義和它們的字面意思一樣。如果登錄名為NULL,則假設登錄名為當前Linux用戶的登錄ID,如果密碼為NULL,則假設密碼為空。
port_number和unix_socket_name應該分別為0和NULL,除非你改變了MySQL安裝的默認設置。他們將默認使用合適的值。
最後,flags參數用來對一些定義的位模式進行OR操作,使得改變使用協議的某些特性。
如果無法連接,則返回NULL。mysql_error函數可以提供有幫助的信息。
3. 使用完連接,通常在程序退出前,要調用函數mysql_close;
mysql_close的函數定義:
void mysql_close(MYSQL *connection);將關閉連接。
#include <stdio.h>
#include <stdlib.h>
#include "mysql.h"
int main (int argc, char *argv[]) {
MYSQL *conn;
// 步驟1: 初始化連接句柄
conn = mysql_init(NULL);
if (conn == NULL) { // 如果返回NULl說明初始化失敗
printf("mysql_init failed!\n");
return EXIT_FAILURE;
}
// 步驟2:實際進行連接
// 參數分別為,conn連接句柄,host是MySQL所在主機或地址,user用戶名,password密碼,database_name數據庫名,後面的都是默認
conn = mysql_real_connect(conn, "host", "user", "password", "database_name", 0, NULL, 0);
if (conn) { // 連接成功
printf("Connection success!\n");
} else {
printf("Connection failed!\n");
}
// 步驟3: 退出前關閉連接
mysql_close(conn);
return 0;
}
gcc -I/usr/include/mysql test.c -L/usr/lib/mysql -lmysqlclient -o app
錯誤處理的兩個函數:
// 返回錯誤碼 unsigned int mysql_errno(MYSQL *connection); // 返回錯誤詳細信息 char* mysql_error(MYSQL *connection);注意,當調用conn = mysql_real_connect(...), 時會遇到一個問題,因為它在失敗時返回NULL指針,並沒有提供一個錯誤碼。但如果是將句柄作為一個變量,那麼即使mysql_real_connect失敗,也仍然能夠處理它。
#include <stdio.h>
#include <stdlib.h>
#include "mysql.h"
#include "errmsg.h"
#include "mysqld_error.h"
void Error(MYSQL* conn) {
printf("Connection error %d: %s\n", mysql_errno(conn), mysql_error(conn));
}
int main (int argc, char *argv[]) {
MYSQL conn; // 是變量而不是指針
mysql_init(&conn); // 注意取地址符&
if (mysql_real_connect(&conn, "192.168.137.246", "root", "123456", "test", 0, NULL, 0)) {
printf("Connection success!\n");
mysql_close(&conn);
} else {
fprintf(stderr, "Connection failed!\n");
if (mysql_errno(&conn)) {
fprintf(stderr, "Connection error %d: %s\n", mysql_errno(&conn), mysql_error(&conn));
}
}
return EXIT_SUCCESS;
}