PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, ]); // Create the database if it doesn't exist $pdo->exec('CREATE DATABASE IF NOT EXISTS '.DB_NAME); // Select the database $pdo->exec('USE '.DB_NAME); $pdo->exec('CREATE TABLE IF NOT EXISTS centers ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, address VARCHAR(255) NOT NULL, contact VARCHAR(255) NOT NULL );'); $pdo->exec("CREATE TABLE IF NOT EXISTS users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, role ENUM('guest', 'user', 'center_staff', 'admin') NOT NULL DEFAULT 'user', points INT DEFAULT 0, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );"); $pdo->exec("CREATE TABLE IF NOT EXISTS waste_submissions ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL, item_type VARCHAR(100) NOT NULL, quantity INT NOT NULL, points_awarded INT NOT NULL, submission_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE );"); $pdo->exec("CREATE TABLE IF NOT EXISTS password_resets ( id INT AUTO_INCREMENT PRIMARY KEY, email VARCHAR(255) NOT NULL, token VARCHAR(255) NOT NULL UNIQUE, expires_at TIMESTAMP NOT NULL );"); } catch (PDOException $e) { error_log('Database setup failed: ' . $e->getMessage()); // You could display a generic error page here instead of dying die('Database setup failed. Please check the logs.'); } } return $pdo; }