You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

mysql_options设置MYSQL_OPT_SSL_MODE参数正确传值问题咨询

问题结论

你当前的写法不合规,会触发未定义行为,无法正确配置SSL模式。

错误原因

MYSQL_OPT_SSL_MODE 选项的参数要求是 unsigned int * 类型(指向无符号整型的指针),你当前代码直接传入枚举常量SSL_MODE_DISABLED,本质是把整型常量值当成内存地址传递给MySQL驱动。由于mysql_options是可变参数函数,编译阶段不会严格校验参数类型,这种写法大概率只会触发编译警告,不会直接报编译错误,但运行时驱动读取该地址对应的内存时会触发非法内存访问:轻则配置不生效、拿到随机的SSL模式值,重则程序直接段错误崩溃。

正确写法

参考你第一行MYSQL_OPT_RECONNECT的传参逻辑即可:先定义对应类型的变量存储目标SSL模式值,再把变量的内存地址传入mysql_options,示例代码如下:

unsigned int ssl_mode = SSL_MODE_DISABLED;
mysql_options(&self->handle, MYSQL_OPT_SSL_MODE, &ssl_mode);
注意事项
  • 虽然SSL_MODE_DISABLED、SSL_MODE_PREFERRED等值是mysql.h中定义的mysql_ssl_mode枚举成员,但枚举本质是整型常量,不符合该选项要求的指针传参规则,必须传入存储了目标值的变量地址。
  • 该选项的调用必须放在mysql_real_connect执行之前,否则SSL模式配置不会生效。
  • 不要尝试把枚举值强转为指针类型传入(例如写(void*)SSL_MODE_DISABLED),这种写法在32位/64位不同位宽的系统上存在严重兼容性问题,属于标准未定义行为。

内容的提问来源于stack exchange,提问作者nickyb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 09:12:19