首先保证安装:

1:安装MySQL:sudo apt-get install mysql-server mysql-client

2:安装MySQL开发包:sudo apt-get install libmysqlclient15-dev

此时需要用到的头文件会出现在/usr/include/mysql/里

 

 

 

C语言连接MySQL数据库

此包含两个步骤:

1. 使用函数mysql_init初始化一个连接句柄结构.

mysql_init的函数定义如下:

MYSQL * mysql_init(MYSQL *);

通常传递NULL给这个例程,他会返回一个指向新分配的连接句柄结构的指针。如果传递一个已有的结构,它将会重新初始化。这个例程在出错时返回NULL.


 

2. 实际进行连接

目前只是分配和初始化了一个结构,仍然需要使用mysql_real_connect来向一个连接提供参数, 

mysql_real_connect的函数定义:


1. 2. const char *server_host,
3. const char *sql_user_name,
4. const char *sql_password,
5. const char *db_name,
6. unsigned int port_number,
7. const char *unix_socket_name,
8. 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);

将关闭连接。


连接MySQL的示例:

1. #include <stdio.h>
2. #include <stdlib.h>
3. #include "mysql.h"
4.  
5. int main (int argc, char *argv[]) {
6.  
7. 	MYSQL *conn;
8.  
9. // 步骤1: 初始化连接句柄
10. NULL);
11.  
12. if (conn == NULL) { // 如果返回NULl说明初始化失败
13. printf("mysql_init failed!\n");	
14. return EXIT_FAILURE;
15. 	}
16.  
17. // 步骤2:实际进行连接
18. // 参数分别为,conn连接句柄,host是MySQL所在主机或地址,user用户名,password密码,database_name数据库名,后面的都是默认
19. "host", "user", "password", "database_name", 0, NULL, 0);
20.  
21. if (conn) { // 连接成功
22. printf("Connection success!\n");	
23. else {
24. printf("Connection failed!\n");	
25. 	}
26.  
27. // 步骤3: 退出前关闭连接
28. 	mysql_close(conn);
29.  
30. return 0;
31. }


编译和运行:

gcc -I/usr/include/mysql test.c -L/usr/lib/mysql -lmysqlclient -o app

cte mysql 图解 mysql -c_#include



 

错误处理

 

错误处理的两个函数:

1. // 返回错误码
2. unsigned int mysql_errno(MYSQL *connection);
3. // 返回错误详细信息
4. 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;
}

 

如果说我的文章对你有用,只不过是我站在巨人的肩膀上再继续努力罢了。
若在页首无特别声明,本篇文章由 Schips 经过整理后发布。