PDO::FETCH_ASSOC, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // 强制开启查询缓冲:避免「2014 Cannot execute queries while other // unbuffered queries are active」。该连接在多处被复用(单例), // 若不缓冲,前一条语句的结果集未取完就会阻塞后续查询。 PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, ); $pdo = new PDO($dsn, DB_USER, DB_PASS, $option); // 部分环境在构造选项里设置不生效,再显式 setAttribute 兜底 $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true); return self::$pdo = $pdo; } catch (PDOException $e) { error_log('DB connection error: ' . $e->getMessage()); exit('数据库连接失败,请联系管理员'); } } }