当前位置: 首页 > article >正文

mysql_init和mysql_real_connect的形象化认识

解析总结

在这里插入图片描述

1. mysql_init 的作用

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

MYSQL *conn = mysql_init(NULL); // 初始化连接句柄

2. mysql_real_connect 的参数

函数原型:

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)
);

参数对照表

图片中的参数实际参数名说明
serverhost服务器地址
portport端口号(若为 0,使用默认值 3306)
unix_socketunix_socketUnix Socket 路径(通常填 NULL)
useruser用户名
passwordpasswd密码
databasedb默认连接的数据库(可选)
client_flagclient_flag客户端选项(如是否允许多语句查询)

3. 连接示例
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 数据库的连接与基础操作。


http://www.kler.cn/a/525835.html

相关文章:

  • Git图形化工具【lazygit】
  • fscan全家桶更新:fscan免杀版,可过360、火绒、微步云沙箱,其他的自行测试
  • Windows11无法打开Windows安全中心主界面
  • 2025春晚刘谦魔术揭秘魔术过程
  • 【go语言】结构体
  • mac安装dockerdesktop优化
  • OSPF邻接关系无法建立之MTU问题
  • Day30-【AI思考】-错题分类进阶体系——12维错误定位模型
  • 前馈神经网络——最基本的神经网络架构
  • 【Leetcode 每日一题】350. 两个数组的交集 II
  • 昆虫机器人:从仿生设计到未来应用
  • SpringBoot Web开发(SpringMVC)
  • CF EDU ROUND 172
  • unity学习24:场景scene相关生成,加载,卸载,加载进度,异步加载场景等
  • 前端进阶:深度剖析预解析机制
  • 电梯系统的UML文档13
  • 跟李沐学AI:视频生成类论文精读(Movie Gen、HunyuanVideo)
  • python学opencv|读取图像(五十一)使用修改图像像素点上BGR值实现图像覆盖效果
  • java求职学习day19
  • AI协助探索AI新构型的自动化创新概念
  • 8641 冒泡排序
  • 【教学类-89-03】20250113新年篇03——福字贴(PPTX艺术字-空心字)
  • 我的求职面经:(2)C++中空指针请使用nullptr不要使用NULL
  • Haproxy介绍及学习
  • 代码随想录_栈与队列
  • 1/30每日一题