实现mysqli连接的最佳实践/最实用的方法
Posted
技术标签:
【中文标题】实现mysqli连接的最佳实践/最实用的方法【英文标题】:Best practices / most practical ways to implement mysqli connections 【发布时间】:2020-09-18 14:49:56 【问题描述】:我正在努力简化我们的数据库助手和实用程序,我看到我们的每个功能,例如 findAllUsers()....
或 findCustomerById($id) ...
都有自己的连接详细信息,例如:
function findAllUsers()
$srv = 'xx.xx.xx.xx';
$usr = 'username';
$pwd = 'password';
$db = 'database';
$port = 3306;
$con = new mysqli($srv, $usr, $pwd, $db, $port);
if ($con->connect_error)
die("Connection to DB failed: " . $con->connect_error);
else
sql = "SELECT * FROM customers..."
.....
.....
对于每个帮助器/函数等等。所以我考虑使用返回连接对象的函数,例如:
function dbConnection ($env = null)
$srv = 'xx.xx.xx.xx';
$usr = 'username';
$pwd = 'password';
$db = 'database';
$port = 3306;
$con = new mysqli($srv, $usr, $pwd, $db, $port);
if ($con->connect_error)
return false;
else
return $con;
那我就可以了
function findAllUsers()
$con = dbConnection();
if ($con === false)
echo "db connection error";
else
$sql = "SELECT ....
...
与 $con = new dbConnection()
这样的 Class 系统相比,使用这样的函数有什么优势吗?
【问题讨论】:
两者都非常糟糕。 嘿,常识,情况如何?我知道开销类使用的气味会迅速吸引啊哈。但是使用一个函数也有那么糟糕吗? 【参考方案1】:您应该只打开一次连接。一旦你意识到你只需要打开一次连接,你的函数dbConnection
就变得没用了。您可以在脚本开头实例化 mysqli 类,然后将其作为参数传递给所有函数/类。
连接总是相同的三行:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$con = new mysqli($srv, $usr, $pwd, $db, $port);
$con->set_charset('utf8mb4');
然后只需将其作为参数传递,不再对if
语句执行任何检查。
function findAllUsers(\mysqli $con)
$sql = "SELECT ....";
$stmt = $con->prepare($sql);
/* ... */
看起来您的代码是某种意大利面条式代码。因此,我强烈建议重写它并将 OOP 与 PSR-4 一起使用。
【讨论】:
以上是关于实现mysqli连接的最佳实践/最实用的方法的主要内容,如果未能解决你的问题,请参考以下文章