如何使用PDO的持久连接?

Jic*_*hao 10 php mysql pdo

我有以下代码并在Firefox中刷新此网页5次,然后MySQL向我展示了5个连接.根据PDO手册,

持久连接不会在脚本末尾关闭,而是在另一个脚本使用相同凭据请求连接时进行高速缓存和重新使用.持久连接缓存允许您避免每次脚本需要与数据库通信时建立新连接的开销,从而产生更快的Web应用程序.

我使用了相同的凭据,但MYSQL连接的数量不断增加.即使尝试关闭连接$db = null也无法关闭连接.我的代码出了什么问题?

<?php
try {
 $dbh = new PDO('mysql:host=127.0.0.1;dbname=lingtong', 'root', 'xxxxxx', array(PDO::ATTR_PERSISTENT => true));
 foreach ($dbh->query('SELECT * from agent') as $row) 
  print_r($row);
 $dbh = null;
} catch (PDOException $e) {
 print "Error! : " . $e->getMessage() . "<br/>";
 die();
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*ier -1

据我所知,持久连接你可能不需要它:

  1. 你在本地主机上,所以连接速度非常快,你不会从连接缓存中节省很多
  2. 由于 Apache 的底层原理,您有许多线程来响应客户端请求,并且由于这些多线程,连接持久在单个线程中,而不是在所有线程上共享,因此您将看到 mysql 中的连接数增加直到达到apache的ThreadLimit
  3. 持久连接存在一些风险,会导致 dbLock 或 tableLock 等应用程序出现问题

现在,如果您仍然认为确实需要它,您可能想对持久连接进行更多研究

  • 否决的原因:某人是否在本地主机上并不相关。非持久连接消耗文件描述符。非持久连接在每个 http 请求上启动连接握手。2) Apache 或 nginx 保留每个线程的连接,并且它们执行一次握手 - 这意味着每个后续请求 **不会** 必须经历此开销。那就是你想要的**。连接上升的原因是 Apache 是一个写得非常糟糕的软件,无法正确清理。3)什么鬼?!你刚刚丢弃了 0 个事实的随机陈述。 (2认同)
  • 这个答案已经有 8 年历史了,而且甚至都不正确。人们通常会阅读他们想要的真实内容并投票,而不考虑事实。如今,应用程序的构建变得更好并且更具前瞻性。如果您想要一个快速的应用程序,您将使用持久连接,因为连接一次总是比每次请求时连接/断开连接更快(这实际上会破坏数据库并降低性能)。 (2认同)