如何制作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连接功能?的主要内容,如果未能解决你的问题,请参考以下文章