C语言和MySQL的连接可以通过MySQL官方提供的C API实现,这套接口封装了和MySQL服务端通信的底层逻辑,开发者只需要调用对应的函数就能完成连接、查询、断开等一系列操作。下面先介绍环境准备和完整连接流程。

环境准备
在编写连接代码之前,需要先完成开发环境的配置:
- 安装MySQL服务端,确保服务处于运行状态,同时记录好数据库的地址、端口、用户名、密码和要连接的数据库名称。
- 安装MySQL开发库,在Ubuntu系统下可以通过
sudo apt-get install libmysqlclient-dev命令安装,在CentOS系统下可以通过sudo yum install mysql-devel命令安装。 - 编译代码时需要链接MySQL客户端库,在gcc编译命令中添加
-lmysqlclient参数。
核心连接步骤
使用C API连接MySQL的完整流程可以分为以下几个步骤:
1. 引入头文件
首先需要引入MySQL C API对应的头文件,头文件中声明了所有连接和操作相关的函数与结构体。
2. 初始化连接句柄
连接句柄是后续所有操作的基础,需要先通过mysql_init函数初始化一个MYSQL结构体实例。
3. 建立连接
使用mysql_real_connect函数传入连接参数,向MySQL服务端发起连接请求,函数返回非空值表示连接成功。
4. 执行操作与断开连接
连接成功后可以执行SQL语句,操作完成后需要调用mysql_close函数关闭连接,释放相关资源。
完整示例代码
下面是一段完整的C语言连接MySQL的示例代码,包含连接、简单查询和断开连接的完整流程:
#include <stdio.h>
#include <stdlib.h>
#include <mysql/mysql.h>
int main() {
// 初始化MySQL连接句柄
MYSQL *mysql = mysql_init(NULL);
if (mysql == NULL) {
fprintf(stderr, "mysql_init failedn");
return 1;
}
// 设置连接参数并发起连接
// 参数依次为:句柄、主机地址、用户名、密码、数据库名、端口、Unix套接字、客户端标志
MYSQL *conn = mysql_real_connect(
mysql,
"127.0.0.1", // MySQL服务地址,本地为127.0.0.1
"root", // 数据库用户名
"123456", // 数据库密码
"test_db", // 要连接的数据库名称
3306, // MySQL服务端口,默认是3306
NULL, // Unix套接字,本地连接不需要可以设为NULL
0 // 客户端标志,一般设为0
);
// 判断连接是否成功
if (conn == NULL) {
fprintf(stderr, "mysql_real_connect failed: %sn", mysql_error(mysql));
mysql_close(mysql);
return 1;
}
printf("MySQL连接成功n");
// 执行简单的查询语句
const char *sql = "SELECT VERSION()";
if (mysql_query(mysql, sql) != 0) {
fprintf(stderr, "mysql_query failed: %sn", mysql_error(mysql));
} else {
// 获取查询结果
MYSQL_RES *result = mysql_store_result(mysql);
if (result != NULL) {
MYSQL_ROW row = mysql_fetch_row(result);
if (row != NULL) {
printf("MySQL版本: %sn", row[0]);
}
// 释放结果集资源
mysql_free_result(result);
}
}
// 关闭连接,释放资源
mysql_close(mysql);
printf("MySQL连接已关闭n");
return 0;
}
编译与运行
将上述代码保存为mysql_connect.c,使用以下命令编译:
gcc mysql_connect.c -o mysql_connect -lmysqlclient
编译成功后执行生成的可执行文件,如果输出连接成功和MySQL版本信息,说明连接流程正确。
常见问题说明
- 如果编译时提示找不到
mysql/mysql.h头文件,说明没有安装MySQL开发库,需要先安装对应的依赖包。 - 如果连接时提示访问拒绝,需要检查用户名、密码、数据库名称是否正确,以及MySQL用户是否有对应数据库的访问权限。
- 连接使用完毕后一定要调用
mysql_close函数,避免句柄资源泄漏。
C语言MySQL连接mysql_connectMySQL_C_API数据库编程修改时间:2026-07-12 16:12:25