connection)) { if ($this->database->needsUser()) { $this->connection = new PDO($this->database->getDSN(), $this->database->user, $this->database->password); } else { $this->connection = new PDO($this->database->getDSN()); } } return $this; } public function getPDO(): PDO { $this->connect(); return $this->connection; } public function getQueryBuilder(): Database\Query\Builder { return $this->queryBuilder; } public function query(string $query): PDOStatement { $this->connect(); $statement = $this->connection->query($query); if ($statement === false) { throw new PDOException("Query failed: '{$query}'"); } return $statement; } public function prepare(string $query): PDOStatement { $this->connect(); $statement = $this->connection->prepare($query); if ($statement === false) { throw new PDOException("Query failed: '{$query}'"); } return $statement; } public function execute(string $query, ?array $data = null): PDOStatement { if ($data === null) { return $this->query($query); } $statement = $this->prepare($query); $status = $statement->execute($data); if ($status === false) { throw new PDOException("Query could not be executed: '{$query}'"); } return $statement; } }