PHP - mysqli 连接因其中一种方式失败

PHP - mysqli connection fails for one of ways

我是php的新手,有一件事我不太明白。

我的文件 host.php 导入配置和 returns mysqli() 的新实例。
在另一个 php 文件中,当我尝试创建新连接时:

try {
    $connection1 = require_once 'host.php';

    $config = require_once 'config.php';
    $connection2 = new mysqli($config['host'], $config['user'], $config['password'], $config['database']);
} 

当我丢弃它时

var_dump($connection1);
var_dump($connection2);

我进入了我的屏幕

bool(true)

object(mysqli)

host.php 文件包含与上面 $config = ... 完全相同的行,但不是 $connection2 它 returns new mysqli(...) object.

为什么这两个实例在初始化后 returns 其他值?
谢谢你帮助我理解它:)

要求不能return。您必须在其他文件中设置 $connection1 = new mysqli。

您需要使用 return 到 return 包含文件中的值。否则它只会告诉您文件是否包含在内。

在您的一个文件中创建 mysqli 连接,同时考虑所需的三个步骤。不要添加任何 try-catch 或任何其他噪音。

<?php

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'user', 'pass', 'db');
$mysqli->set_charset('utf8mb4'); // always set the charset

return $mysqli;

然后在您的其他文件中包含它并分配 return 变量。

<?php

$conn = require_once 'mysqli.php';

现在您可以使用 $conn 来执行您的 SQL 语句。

当然,除非您将其包装在 IIFE 中,否则这样的事情意义不大。对于 3 行代码,它没有区别。您不会用变量污染全局范围。如果你使用 PHP 配置文件并且你想将这些变量保存在一个范围内,那么 IIFE 可能是有意义的。

return (function () {
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $config = require_once 'config.php';
    $mysqli = new mysqli($config['host'], $config['user'], $config['password'], $config['database']);
    $mysqli->set_charset('utf8mb4'); // always set the charset

    return $mysqli;
})();