51 lines
1.9 KiB
PHP
51 lines
1.9 KiB
PHP
<?php
|
|
// db/config.php
|
|
// Database configuration with fallback for XAMPP/Localhost
|
|
|
|
// 1. Try environment variables (for Cloud/VM environments)
|
|
$db_host = getenv('DB_HOST');
|
|
$db_name = getenv('DB_NAME');
|
|
$db_user = getenv('DB_USER');
|
|
$db_pass = getenv('DB_PASS');
|
|
|
|
// 2. Fallback to XAMPP defaults if not set
|
|
if ($db_host === false) $db_host = 'localhost';
|
|
if ($db_name === false) $db_name = 'car_dealership';
|
|
if ($db_user === false) $db_user = 'root';
|
|
if ($db_pass === false) $db_pass = ''; // Default XAMPP password is empty
|
|
|
|
// Define constants if not already defined
|
|
if (!defined('DB_HOST')) define('DB_HOST', $db_host);
|
|
if (!defined('DB_NAME')) define('DB_NAME', $db_name);
|
|
if (!defined('DB_USER')) define('DB_USER', $db_user);
|
|
if (!defined('DB_PASS')) define('DB_PASS', $db_pass);
|
|
|
|
function db() {
|
|
static $pdo;
|
|
if (!$pdo) {
|
|
try {
|
|
$dsn = 'mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset=utf8mb4';
|
|
$pdo = new PDO($dsn, DB_USER, DB_PASS, [
|
|
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
|
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
|
]);
|
|
} catch (PDOException $e) {
|
|
// Special handling: If database not found, try connecting without DB name
|
|
// This is useful for the installer script to create the DB
|
|
if ($e->getCode() == 1049) { // Unknown database
|
|
$dsn_no_db = 'mysql:host='.DB_HOST.';charset=utf8mb4';
|
|
try {
|
|
$pdo = new PDO($dsn_no_db, DB_USER, DB_PASS, [
|
|
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
|
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
|
]);
|
|
} catch (PDOException $ex) {
|
|
die("Database connection failed: " . $ex->getMessage());
|
|
}
|
|
} else {
|
|
die("Database connection failed: " . $e->getMessage());
|
|
}
|
|
}
|
|
}
|
|
return $pdo;
|
|
} |