59 lines
1.8 KiB
PHP
59 lines
1.8 KiB
PHP
<?php
|
|
|
|
// Establece coneccion a base de datos (Singleton) usando el motor pgsql (postgreSQL) mediante la interfaz PDO
|
|
|
|
class Database {
|
|
|
|
// Conección única reutilizable
|
|
|
|
private static $connection = null;
|
|
|
|
public static function getConnection() {
|
|
|
|
// Si ya existe una conexión activa, se reutiliza
|
|
|
|
if (self::$connection !== null) {
|
|
return self::$connection;
|
|
}
|
|
|
|
// Obtiene credenciales desde variables de entorno, se definen valores por defecto en caso de que no existan
|
|
|
|
$host = $_ENV['DB_HOST'] ?? 'db';
|
|
$port = $_ENV['DB_PORT'] ?? '5432';
|
|
$db = $_ENV['DB_NAME'] ?? 'bytecenter';
|
|
$user = $_ENV['DB_USER'] ?? 'admin';
|
|
$pass = $_ENV['DB_PASSWORD'] ?? 'admin_bytepassword';
|
|
|
|
// DSN (Data Source Name):
|
|
// Define el tipo de base de datos (pgsql) y los parámetros de conexión
|
|
// Es la "cadena de conexión" que PDO necesita para saber a dónde conectarse
|
|
|
|
$dsn = "pgsql:host=$host;port=$port;dbname=$db";
|
|
|
|
try {
|
|
|
|
// Se crea la instancia de PDO (conección a la BD)
|
|
|
|
self::$connection = new PDO($dsn, $user, $pass, [
|
|
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
|
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
|
]);
|
|
|
|
return self::$connection; // Retorna la conección lista para usar
|
|
|
|
} catch (PDOException $e) {
|
|
|
|
// Log interno
|
|
|
|
error_log($e->getMessage());
|
|
|
|
// Muestra mensaje amigable
|
|
|
|
die("Ocurrió un error inesperado. Por favor, comuníquese con un administrador o intente denuevo mas tarde.");
|
|
|
|
// Mensaje para desarrollo -->
|
|
|
|
// die("Error de conexión a la base de datos: " . $e->getMessage());
|
|
}
|
|
}
|
|
} |