首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

PHP PDO 伺服器上每次查詢需重連?建立連線池解決

     編輯:程式設計綜合問答

本機 WAMP 正常,上 LAMP 伺服器卻必須每次查詢前 new PDO(),否則後續查詢不執行。主因是 PHP-FPM 工作進程模式下,單一請求生命週期內重用連線需正確管理,或伺服器 wait_timeout 過短導致連線被 MySQL 斷開。

解決方案:啟用 PDO 連線池

$pdo = new PDO(
    "mysql:host=$db_host;dbname=$db_name;charset=utf8",
    $db_username, $db_password,
    [
        PDO::ATTR_PERSISTENT => true,   // 啟用持久連線(連線池)
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
    ]
);
// 整個請求期間複用 $pdo,無需重新 new

補充優化

  • MySQL wait_timeout 設 ≥ 600 秒,避免閒置斷開。
  • PHP-FPM pm.max_children 與 MySQL max_connections 匹配,防止連線耗盡。
  • 長時間腳本(CLI)建議手動 $pdo = null 釋放,或定期重連。

為何本機正常?

本機通常單用戶、低併發、預設參數較寬鬆,問題不易暴露。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved