PHP自动关闭脚本末尾的连接

我知道
PHP会在脚本结束时自动关闭打开的MySQL连接,而打开持久连接的唯一可行方法是使用适当的PHP函数;已经提出并回答了很多问题.

我想知道的是保持临时连接而不是持久连接的好处 – 或者不方便

编辑:

每个PHP用户会话的持久连接.

例如,语句如下:

session_start();
$connection = new mysqli($host, $user, $pass, $db);
$_SESSION['connection'] = $connection;

可能会设置对mysqli对象的引用,该对象对于同一用户在同一会话中的网站导航中执行多个查询非常有用.
如果连接应该在激活后很快使用,那么将它打开以进行进一步查询是不正确的选择?当多个用户是来自网站的HTTP请求页面以保持MySQL连接存活时,这种方法可能会产生不方便的情况(以及可能的安全风险)?
我想知道更多.谢谢.

最佳答案 连接到MySQL或任何数据库都有开销,尽管它通常不大.当MySQL服务在不同的服务器上运行时,或者根据所需的身份验证方法和init命令,此开销可能更大.

更多,MySQL连接可能有相关的缓存.因此,重用连接可能能够重用这些缓存.

但是在会话中保存资源不起作用.会话数据被序列化,并存储在例如请求之间的文件.这就是必须使用持久连接方法的原因.

原因是连接最终是内部类的资源或套接字连接,如果没有特殊处理,就无法“保存”.尝试一下,你会发现你得到一个错误(PDO和mysqli.)

mysqli::query(): Couldn’t fetch mysqli

我认为没有任何方法可以获得特定于会话的连接重用,而无需编写扩展来实现它.从理论上讲,理论上可以实现一种方法,通过会话ID从池中提取连接.

但是,持久数据库连接存在许多潜在的缺点和风险:

>如果您的应用程序创建TEMPORARY TABLE,那么这些表在下次运行时仍然存在,因为它是相同的MySQL会话.
>如果设置任何变量(SET SESSION等),它们将被保留.
>根据事务的处理方式,理论上可能持久连接可能正在进行事务处理.
>如果应用程序发出任何LOCK命令或使用用户锁,则可以在请求之间保持锁定,并在不知情的情况下保留在新请求中.
>在多租户(共享)Web服务器上,另一个进程以某种方式获取数据库访问权限的风险应该更高.
>这可能会使大量连接长时间处于打开状态,从而增加了数据库服务器上的资源使用量.
>您仍然需要在请求之间丢失连接.

点赞