PHP调试mysqli连接,mysqli实例工作不正常?

PHP Debugging mysqli connection, mysqli instances do not work properly?

提问人:Lauro182 提问时间:1/23/2020 更新时间:1/23/2020 访问量:171

问:

我已经有一段时间没有在这里发布问题了,但我需要一些帮助,试图理解这种行为。

我有一个简单的脚本来调试我的连接是否已建立,使用 mysqli。

$mysqli = new mysqli(HOST, USER, PASSWORD, DB);

if ($mysqli->connect_error){
    die('Connection error: (' . $mysqli->connect_errno . ') '.$mysqli->connect_error);
}else{
    die(var_dump($mysqli));
}

这很好用,如果没有建立连接,无论出于何种原因,connect_error都有我的错误,脚本死了,我知道它为什么死了,它告诉我。否则,它会死掉并抛给我连接对象属性值,一切都很好。

但是,如果我在声明和调试之间添加一个新实例,则有 2 种可能性:

案例 1

$mysqli_invalid = new mysqli(HOST, USER, PASSWORD, DB);

$mysqli_valid = new mysqli(HOST_valid, USER_valid, PASSWORD_valid, DB_valid);

if ($mysqli_invalid->connect_error){  <--NOT SET, it comes NULL
    die('Connection error: (' . $mysqli_invalid->connect_errno . ') '.$mysqli_invalid->connect_error);
}else{
    die(var_dump($mysqli_invalid)); <--ALL CLASS PROPERTIES ARE NULL
}

在这种情况下,它会跳转到 else,并抛出一个 mysqli 对象,其所有属性为 NULL。

案例 2

$mysqli_invalid1 = new mysqli(HOST, USER, PASSWORD, DB);

$mysqli_invalid2 = new mysqli(HOST_invalid2, USER_invalid2, PASSWORD_invalid2, DB_invalid2);

if ($mysqli_invalid1->connect_error){  <--SET WITH $mysqli_invalid2 values. 
    die('Connection error: (' . $mysqli_invalid1->connect_errno . ') '.$mysqli_invalid1->connect_error);
}else{
    die(var_dump($mysqli_invalid1));
}

在这种情况下,它死了,但我的 $mysqli_invalid1 有 $mysqli_invalid2 值。

在我的项目中,我有 5 个连接,因此我需要在尝试建立连接后检查每个连接是否正确。如果我尝试建立所有连接,然后检查是否每个连接都已建立,它不会像我期望的那样工作。

如果PHP是面向对象准备的,为什么会有这种行为呢?

php oop mysqli

评论

0赞 Barmar 1/23/2020
如果你正在做这么复杂的事情,我强烈建议你切换到PDO。这要好得多。
0赞 Barmar 1/23/2020
我刚刚重现了这个,这似乎是mysqli中的一个错误。
0赞 Barmar 1/23/2020
它在 PHP 5.6 和 7.3 中都失败了。当它显示空属性时,它还会打印警告 var_dump():尚未允许属性访问var_dump():无法获取 mysqli
0赞 Lauro182 1/23/2020
是的,我注意到了这一切。也许mysqli错误,就像你说的。
1赞 Dharman 1/23/2020
这回答了你的问题吗?我们应该手动检查mysqli_connect()错误吗?

答: 暂无答案