143fe3d488
- Implemented clean MVC architecture with Router, Controller, and Model base classes - Created database migrations for users, bands, bookings, reviews, and availability - Set up Tailwind CSS with yellow color scheme and modern design - Added Alpine.js for reactive JavaScript components - Configured Vite for asset building and hot module replacement - Created authentication and role-based middleware - Implemented helper functions and configuration system - Added comprehensive README with setup instructions - Configured Apache with proper rewrite rules and security headers - Set up Composer and npm package management with modern dependencies
64 lines
1.8 KiB
PHP
64 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace Database;
|
|
|
|
use PDO;
|
|
use PDOException;
|
|
|
|
class Database
|
|
{
|
|
private static ?PDO $instance = null;
|
|
|
|
public static function connect(): PDO
|
|
{
|
|
if (self::$instance === null) {
|
|
try {
|
|
$host = $_ENV['DB_HOST'] ?? '127.0.0.1';
|
|
$port = $_ENV['DB_PORT'] ?? '3306';
|
|
$dbname = $_ENV['DB_DATABASE'] ?? 'getyourband';
|
|
$username = $_ENV['DB_USERNAME'] ?? 'root';
|
|
$password = $_ENV['DB_PASSWORD'] ?? '';
|
|
|
|
$dsn = "mysql:host={$host};port={$port};dbname={$dbname};charset=utf8mb4";
|
|
|
|
self::$instance = new PDO($dsn, $username, $password, [
|
|
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
|
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
|
PDO::ATTR_EMULATE_PREPARES => false,
|
|
]);
|
|
} catch (PDOException $e) {
|
|
throw new \RuntimeException("Database connection failed: " . $e->getMessage());
|
|
}
|
|
}
|
|
|
|
return self::$instance;
|
|
}
|
|
|
|
public static function disconnect(): void
|
|
{
|
|
self::$instance = null;
|
|
}
|
|
|
|
public static function runMigrations(string $migrationsPath): void
|
|
{
|
|
$db = self::connect();
|
|
$files = glob($migrationsPath . '/*.sql');
|
|
sort($files);
|
|
|
|
foreach ($files as $file) {
|
|
echo "Running migration: " . basename($file) . "\n";
|
|
$sql = file_get_contents($file);
|
|
|
|
try {
|
|
$db->exec($sql);
|
|
echo "✓ Migration completed successfully\n";
|
|
} catch (PDOException $e) {
|
|
echo "✗ Migration failed: " . $e->getMessage() . "\n";
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
echo "\nAll migrations completed!\n";
|
|
}
|
|
}
|