mysql_init和mysql_real_connect的形象化认识

解析总结

1. mysql_init 的作用

mysql_init 用于初始化一个 MYSQL 结构体,为后续数据库连接和操作做准备。该结构体存储连接配置及状态信息,是 MySQL C API 的核心句柄。

示例:

c 复制代码
MYSQL *conn = mysql_init(NULL); // 初始化连接句柄

2. mysql_real_connect 的参数

函数原型:

c 复制代码
MYSQL *mysql_real_connect(
    MYSQL *mysql,           // 由 mysql_init 初始化的连接句柄
    const char *host,       // 服务器地址(如 "localhost" 或 IP)
    const char *user,       // 用户名(如 "root")
    const char *passwd,     // 密码
    const char *db,         // 默认数据库名(可选)
    unsigned int port,      // 端口号(默认 3306,若为 0 则使用默认值)
    const char *unix_socket,// Unix Socket 路径(通常为 NULL)
    unsigned long client_flag // 客户端标志(如 CLIENT_MULTI_STATEMENTS)
);

参数对照表

图片中的参数 实际参数名 说明
server host 服务器地址
port port 端口号(若为 0,使用默认值 3306)
unix_socket unix_socket Unix Socket 路径(通常填 NULL)
user user 用户名
password passwd 密码
database db 默认连接的数据库(可选)
client_flag client_flag 客户端选项(如是否允许多语句查询)

3. 连接示例
c 复制代码
MYSQL *conn = mysql_init(NULL);
if (!conn) {
    fprintf(stderr, "初始化失败\n");
    return;
}

// 连接数据库
if (!mysql_real_connect(
    conn,                   // 句柄
    "localhost",            // 服务器地址
    "root",                 // 用户名
    "password123",          // 密码
    "mydb",                 // 默认数据库
    0,                      // 端口(0 表示默认 3306)
    NULL,                   // Unix Socket(NULL 表示默认)
    CLIENT_MULTI_STATEMENTS // 客户端标志
)) {
    fprintf(stderr, "连接失败: %s\n", mysql_error(conn));
    mysql_close(conn);
    return;
}

4. 数据库与表的操作

连接成功后,可通过其他 API 函数操作数据库和表:

  • 切换数据库mysql_select_db(conn, "database2");
  • 执行查询mysql_query(conn, "SELECT * FROM table1");
  • 处理结果集 :使用 mysql_store_resultmysql_use_result

5. 注意事项
  • 参数顺序mysql_real_connect 的参数顺序固定,需严格遵循。
  • 端口与 Socketportunix_socket 一般不同时使用(若使用 Socket,端口填 0)。
  • 资源释放 :连接结束后需调用 mysql_close(conn) 释放资源。

通过以上步骤,即可完成 MySQL 数据库的连接与基础操作。

相关推荐
不羁。。4 分钟前
【撸靶笔记】第七关:GET - Dump into outfile - String
数据库·笔记·oracle
yangchanghua1112 小时前
pgsql 如何查询今天范围内的数据(当天0点0分0秒 - 当天23点59分59秒....)
数据库·pgsql
larance2 小时前
SQLAlchemy 的异步操作来批量保存对象列表
数据库·python
python_chai2 小时前
从数据汇总到高级分析,SQL 查询进阶实战(下篇)—— 分组、子查询与窗口函数全攻略
数据库·sql·mysql
在努力的前端小白2 小时前
Spring Boot 敏感词过滤组件实现:基于DFA算法的高效敏感词检测与替换
java·数据库·spring boot·文本处理·敏感词过滤·dfa算法·组件开发
未来之窗软件服务2 小时前
自建知识库,向量数据库 (九)之 量化前奏分词服务——仙盟创梦IDE
数据库·仙盟创梦ide·东方仙盟·自建ai·ai分词
冒泡的肥皂5 小时前
MVCC初学demo(一
数据库·后端·mysql
.Shu.6 小时前
Redis Reactor 模型详解【基本架构、事件循环机制、结合源码详细追踪读写请求从客户端连接到命令执行的完整流程】
数据库·redis·架构
Bruce_Liuxiaowei8 小时前
MySQL完整重置密码流程(针对 macOS)
mysql
麦麦大数据9 小时前
F003疫情传染病数据可视化vue+flask+mysql
mysql·flask·vue·大屏·传染病