【问题标题】:How to make mysqli connect function?如何制作mysqli连接功能?
【发布时间】:2013-02-19 23:38:25
【问题描述】:

我在使用 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());
    }
}

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

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

【问题讨论】:

  • 如果你在函数中设置了一个 var,你就不能使用它
  • Sam 是正确的,查找 php 变量范围。您可以使用以下行返回变量:return $mysqli;然后像这样调用函数: $con = getConnected();
  • 你在哪里使用这个功能?需要多一点
  • 啊,所以我需要全局变量?
  • @user2021893:不,只需按照 Keeleon 的说法返回变量即可。

标签: php mysql mysqli database-connection


【解决方案1】:

你不需要创建这样的函数。正确完成后,与 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;
}

【讨论】:

    【解决方案2】:

    正如一些用户所建议的(并且是最好的方法),返回 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');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-24
      • 2011-12-31
      • 2018-11-26
      • 1970-01-01
      • 2016-03-11
      • 2013-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多