createConnection(); } private function createConnection() { // 主数据库连接 $mainConnName = 'sqlsrv_main_' . uniqid(); $mainConfig = [ 'driver' => 'sqlsrv', 'host' => env('SQLSRV_HOST'), 'port' => env('SQLSRV_PORT'), 'database' => env('SQLSRV_DATABASE'), 'username' => env('SQLSRV_USERNAME'), 'password' => env('SQLSRV_PASSWORD'), 'options' => [ // \PDO::ATTR_TIMEOUT => 30, // 查询超时30秒 \PDO::SQLSRV_ATTR_QUERY_TIMEOUT => 30, // SQL Server专用超时 \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION, // \PDO::ATTR_PERSISTENT => false, // 重要:禁用持久连接 ], ]; Config::set("database.connections.{$mainConnName}", $mainConfig); $this->db = DB::connection($mainConnName); // 测试连接有效性 $this->validateConnection($this->db); } private function validateConnection($connection) { try { $pdo = $connection->getPdo(); $stmt = $pdo->prepare("SELECT 1 AS connection_test"); $stmt->execute(); $result = $stmt->fetch(\PDO::FETCH_ASSOC); if (empty($result) || $result['connection_test'] != 1) { $this->error = "数据库连接失败"; } } catch (\Throwable $e) { $this->error = "数据库连接验证失败: " . $e->getMessage(); } } public function __destruct() { // 主动关闭连接 $this->safeDisconnect($this->db); } private function safeDisconnect(&$connection) { try { if ($connection instanceof \Illuminate\Database\Connection) { // 物理断开连接 $connection->disconnect(); // 清除连接引用 $connection = null; // Log::info("动作", [ // 'param' => "执行了析构", // ]); } } catch (\Throwable $e) { // 静默处理断开错误 Log::info("错误", [ 'param' => $e->getMessage(), ]); } } }