host = DB_HOST; $this->user = DB_USER; $this->pass = DB_PASS; $this->dbname = DB_NAME; $this->connect(); } /** * Get singleton instance */ public static function getInstance() { if (!self::$instance) { self::$instance = new Database(); } return self::$instance; } /** * Connect to the database */ private function connect() { try { $this->conn = new PDO( "mysql:host={$this->host};dbname={$this->dbname}", $this->user, $this->pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'") ); $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $this->conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch (PDOException $e) { die("Database Connection Error: " . $e->getMessage()); } } /** * Get database connection */ public function getConnection() { return $this->conn; } /** * Execute a query with optional parameters */ public function query($sql, $params = []) { try { $stmt = $this->conn->prepare($sql); $stmt->execute($params); return $stmt; } catch (PDOException $e) { die("Query Error: " . $e->getMessage()); } } /** * Get a single record */ public function single($sql, $params = []) { $stmt = $this->query($sql, $params); return $stmt->fetch(); } /** * Get multiple records */ public function resultSet($sql, $params = []) { $stmt = $this->query($sql, $params); return $stmt->fetchAll(); } /** * Get row count */ public function rowCount($sql, $params = []) { $stmt = $this->query($sql, $params); return $stmt->rowCount(); } /** * Get last inserted ID */ public function lastInsertId() { return $this->conn->lastInsertId(); } }