PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_TIMEOUT => 5, // Short timeout for faster fallback ]); return $pdo; } catch (PDOException $pgException) { // Keep the error to report it if the fallback also fails } } // Fallback to local MariaDB/MySQL try { $pdo = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset=utf8mb4', DB_USER, DB_PASS, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, ]); } catch (PDOException $mysqlException) { if (!extension_loaded('pdo_pgsql')) { die("Connection failed: The 'pdo_pgsql' extension is not enabled in your PHP configuration, and the local MySQL connection also failed.
MySQL Error: " . $mysqlException->getMessage()); } $errorMsg = "

Database Connection Failed

"; if (isset($pgException)) { $errorMsg .= "PostgreSQL (Supabase) Error: " . $pgException->getMessage() . "

"; } $errorMsg .= "Local MySQL Error: " . $mysqlException->getMessage() . "

"; $errorMsg .= "Possible Solutions:
"; $errorMsg .= "1. Supabase: Ensure your firewall/ISP allows outgoing connections on port 6543. Try disabling your antivirus temporarily.
"; $errorMsg .= "2. Local MySQL: If you want to use local MySQL, update DB_USER and DB_PASS in db/config.php to match your XAMPP settings (usually 'root' and empty password).
"; $errorMsg .= "3. Verify extension: Make sure extension=pdo_pgsql is uncommented in php.ini AND you have restarted Apache.
"; die($errorMsg); } } return $pdo; }