| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 | <?phpnamespace App\Service;use Illuminate\Support\Facades\Config;use Illuminate\Support\Facades\DB;use Illuminate\Support\Facades\Log;class U8ServerService extends Service{    public $db = null;    public $error = null; // 错误信息    public function __construct()    {        $this->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(),            ]);        }    }}
 |