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

如何获取通过$mysqli->options()设置的各类配置选项值?

获取MySQLi已设置选项的当前值

好问题!我之前也碰到过类似的困惑——MySQLi扩展确实没有提供直接获取MYSQLI_OPT_CONNECT_TIMEOUT、MYSQLI_OPT_SSL_VERIFY_SERVER_CERT这类选项当前值的内置方法,但我们可以通过几种间接方式来解决这个问题:

1. 预先记录配置值(通用方案)

这是最可靠的方法:当你调用$mysqli->options()设置选项时,同时把配置值保存到一个变量、配置类或者全局数组里,后续需要读取时直接引用这个记录即可。比如:

// 保存配置值
$mysqliOptions = [
    MYSQLI_OPT_CONNECT_TIMEOUT => 10,
    MYSQLI_OPT_SSL_VERIFY_SERVER_CERT => false,
    MYSQLI_OPT_LOCAL_INFILE => true
];

// 应用配置
foreach ($mysqliOptions as $option => $value) {
    $mysqli->options($option, $value);
}

// 后续需要读取时直接用$mysqliOptions
echo "连接超时当前值: " . $mysqliOptions[MYSQLI_OPT_CONNECT_TIMEOUT];

这种方式简单直接,完全不需要依赖MySQLi扩展的额外接口。

2. 通过MySQL系统变量查询对应选项

对于部分和MySQL服务器系统变量绑定的选项,比如MYSQLI_OPT_LOCAL_INFILE,可以通过执行SQL查询来获取当前生效的值:

// 查询LOCAL_INFILE的当前值
$result = $mysqli->query("SELECT @@local_infile");
if ($result) {
    $row = $result->fetch_row();
    echo "LOCAL_INFILE 当前值: " . ($row[0] ? "开启" : "关闭");
    $result->free();
}

3. 间接验证连接类选项(比如超时、SSL验证)

像MYSQLI_OPT_CONNECT_TIMEOUT这类连接阶段生效的选项,一旦连接建立后就没法直接读取,但可以通过测试来验证:

  • 连接超时:可以尝试发起一个到无效IP/端口的连接,记录耗时是否符合你设置的超时值。
  • SSL验证:可以用mysqli_get_ssl_cipher()检查当前连接是否使用了SSL加密,但没法直接确认是否验证了服务器证书。如果需要精确确认,还是建议用前面提到的“预先记录配置值”的方案。

为什么get_object_vars($mysqli)看不到这些选项?

因为get_object_vars()只能获取mysqli对象公开的属性,而这些选项属于扩展内部维护的配置,并没有暴露为对象的公共属性,所以无法通过这种方式读取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 12:57:41