gpt4 book ai didi

php - 多个mysqli对象相互覆盖

转载 作者:行者123 更新时间:2023-12-03 20:24:15 24 4
gpt4 key购买 nike

如果我创建到两台服务器的两个并行连接:

$gw03 = new mysqli('gw03.example', 'user', 'pass', 'db');
$gw04 = new mysqli('gw04.example', 'user', 'pass', 'db');

if (!$gw03->connect_errno) {
...
} else if (!$gw04->connect_errno) {
...
} else {
echo "Failed to connect to gw03: (" . $gw03->connect_errno . ") " . $gw03->connect_error . PHP_EOL;
echo "Failed to connect to gw04: (" . $gw04->connect_errno . ") " . $gw04->connect_error . PHP_EOL;
}
如果 gw03 可用但 gw04 不可用,则结果如下
Failed to connect to gw03: (2002) No route to host
Failed to connect to gw04: (2002) No route to host
无法连接到 $gw04 似乎覆盖了 $gw03。 $gw03 和 $gw04 不是独立的对象吗?这里发生了什么?

最佳答案

不幸的是,mysqli 的设计很糟糕。属性connect_errnoconnect_error不是真正的属性。它们只是全局变量的捷径。当第二个连接失败时,全局变量在内部被覆盖。
这是一个很好的理由 stop checking for mysqli errors manually .当发生错误时,您的代码应该抛出错误而不是警告或静默失败。此错误应由您的应用程序正确处理并记录在服务器上的安全位置。不要try-catchecho给用户的错误信息!
要启用 mysqli 错误报告,您应该在任何 new mysqli()/mysqli_connect() 之前添加以下行:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
此设置将告诉 mysqli 在遇到错误时立即抛出异常。不再需要手动检查,也不再有全局变量覆盖自身的问题。

关于php - 多个mysqli对象相互覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64359190/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com