7

我在使用 mysqli 将我连接到数据库的函数时遇到问题。我的目标是getConnected();在需要连接的地方输入。

这是代码:

function getConnected()
{
    $host = 'localhost';
    $user = 'logintest';
    $pass = 'logintest';
    $db = 'vibo';

    $mysqli = new mysqli($host, $user, $pass, $db);

    if ($mysqli->connect_error) {
        die('Connect Error (' . mysqli_connect_errno() . ') '
            . mysqli_connect_error());
    }
}

$mysqli这是我在调用后尝试使用时遇到的错误getConnected()

注意:未定义变量:第 19 行 C:\xampp\htdocs\xampp\loginsystem\index.php 中的 mysqli

4

2 回答 2

14

正如一些用户所建议的(并且是最好的方法),返回 mysqli 实例

function getConnected($host,$user,$pass,$db) {

   $mysqli = new mysqli($host, $user, $pass, $db);

   if($mysqli->connect_error) 
     die('Connect Error (' . mysqli_connect_errno() . ') '. mysqli_connect_error());

   return $mysqli;
}

例子:

$mysqli = getConnected('localhost','user','password','database');
于 2013-03-05T14:23:54.063 回答
0

您不需要创建这样的功能。正确完成后,与 mysqli 的连接只需 3 行代码。这种功能的定义和执行将增加两倍。

打开连接时请记住始终遵循三个步骤:

  1. 启用 mysqli 错误报告。
  2. 创建 mysqli 类的实例。
  3. 设置正确的字符集。推荐的一个是utf8mb4

如果您想将这 3 行包含在一个函数中,您可以执行以下操作:

function getConnected(): \mysqli {
    $host = 'localhost';
    $user = 'logintest';
    $pass = 'logintest';
    $db = 'vibo';

    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $mysqli = new mysqli($host, $user, $pass, $db);
    $mysqli->set_charset('utf8mb4');

    // return the instance of mysqli class
    return $mysqli;
}

但是,硬编码这些值没有多大意义。这些值应该来自环境变量(例如使用getenv()函数读取)或来自配置文件。例如:

function getConnected(): \mysqli {
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $mysqli = new mysqli(getenv('DB_HOST'), getenv('DB_USER'), getenv('DB_PASS'), getenv('DB_NAME'));
    $mysqli->set_charset('utf8mb4');

    // return the instance of mysqli class
    return $mysqli;
}
于 2020-04-21T23:36:14.993 回答