diff --git a/public/api/_db.php b/public/api/_db.php index 708ff5c..8848260 100755 --- a/public/api/_db.php +++ b/public/api/_db.php @@ -2,9 +2,13 @@ try { require_once __DIR__ . '/../../tools/db.php'; $pdo = tools_build_pdo(); -} catch (PDOException $e) { +} catch (Throwable $e) { http_response_code(500); - header('Content-Type: application/json'); - echo json_encode(['error' => 'DB connection failed']); + header('Content-Type: application/json; charset=utf-8'); + $payload = ['error' => 'DB connection failed']; + if (getenv('APP_DEBUG') === '1') { + $payload['detail'] = $e->getMessage(); + } + echo json_encode($payload, JSON_UNESCAPED_UNICODE); exit; } diff --git a/tools/db.php b/tools/db.php index 2a61402..7cac6f8 100644 --- a/tools/db.php +++ b/tools/db.php @@ -2,6 +2,15 @@ function tools_build_pdo(): PDO { $cfg = require __DIR__ . '/../src/config.php'; + if (!is_array($cfg)) { + throw new RuntimeException('DB config did not return an array.'); + } + $required = ['db_host', 'db_name', 'db_user', 'db_pass', 'db_charset']; + foreach ($required as $key) { + if (!array_key_exists($key, $cfg)) { + throw new RuntimeException('Missing DB config key: ' . $key); + } + } $dsn = "mysql:host={$cfg['db_host']};dbname={$cfg['db_name']};charset={$cfg['db_charset']}"; $options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,