如何制作mysqli连接功能?

Posted

技术标签:

【中文标题】如何制作mysqli连接功能?【英文标题】:How to make mysqli connect function? 【发布时间】: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 的说法返回变量即可。 【参考方案1】:

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

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

    启用 mysqli 错误报告。 创建 mysqli 类的实例。 设置正确的字符集。推荐一个是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');

【讨论】:

以上是关于如何制作mysqli连接功能?的主要内容,如果未能解决你的问题,请参考以下文章

在 docker php 容器中找不到 MySQLi

我如何在获取 assoc 时制作表格

从 php 脚本制作可点击的文本

PHP MySQLi 增删改查

如何制作动态层分组报表

PHP mysql 到 mysqli 迁移问题(自定义函数,程序风格)