本機 WAMP 正常,上 LAMP 伺服器卻必須每次查詢前 new PDO(),否則後續查詢不執行。主因是 PHP-FPM 工作進程模式下,單一請求生命週期內重用連線需正確管理,或伺服器 wait_timeout 過短導致連線被 MySQL 斷開。
$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
wait_timeout 設 ≥ 600 秒,避免閒置斷開。pm.max_children 與 MySQL max_connections 匹配,防止連線耗盡。$pdo = null 釋放,或定期重連。本機通常單用戶、低併發、預設參數較寬鬆,問題不易暴露。