提高 PHP 性能:PHP $_SESSION v mysqli($servername, $username, $password, $dbname)

Improve PHP performance : PHP $_SESSION v mysqli($servername, $username, $password, $dbname)

我想提高 PHP 代码的性能。

我有一个创建会话并分配用户名和密码的登录脚本

$_SESSION['name'] = $_POST['username'];
$_SESSION['password'] = $_POST['password'];

我的主脚本有很多函数,可以用

查询数据库
$servername = "localhost";  $username = $_SESSION['name'];  
$password = $_SESSION['password'];  $dbname = "database";
$conn = new mysqli($servername, $username, $password, $dbname);

有没有比在每个函数中创建一个新连接更好的方法?

new mysqli($servername, $username, $password, $dbname)

当我有一个会话时,新的 mysqli 连接是否会不必要地降低性能?

例如,我可以声明一个全局 $conn 并在每个函数中重用它吗?

在 php 中,全局变量可能有点争论,例如查看这个 post:Are global variables in PHP considered bad practice? If so, why? .

就我个人而言,我属于 globals are bad 阵营。您不需要为每个函数都创建一个新连接。理想情况下(至少在我看来)您应该创建一个连接对象,然后将其传递给您的程序(即 dependency injection https://codeinphp.github.io/post/dependency-injection-in-php/)。

如果您目前没有使用 OOP,那么只需将其定义为参数即可,例如

functionName(String $var1, int $var2, mysqli $conn) {
   //do your stuff
  
}

Do new mysqli connections slow the performance unnecessarily when I have a session?

视情况而定。该会话应该用于跨脚本持久保存数据,因此您应该警惕您在那里存储的内容,但是是的,您可以使用它来避免在每个页面上发出请求。然后你可以只使用isset($_SESSION['your-session-name'])来检查你是否需要打电话

我强烈建议不要这样做:

$_SESSION['name'] = $_POST['username'];
$_SESSION['password'] = $_POST['password'];

首先,您根本没有清理数据 - 请记住,您永远不能相信来自任何地方的数据。其次,密码不应存储在会话中,也不应以纯文本形式保存在任何地方,第三,您站点的登录详细信息不应与数据库的凭据相同。数据库凭据应来自独立来源,例如 .env.ini 文件 - 这也不应保存在您的版本控制中