JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbrconnection->get_server_info(); } public function prepare(string $sql): Statement { try { $stmt = $this->connection->prepare($sql); } catch (mysqli_sql_exception $e) { throw ConnectionError::upcast($e); } if ($stmt === false) { throw ConnectionError::new($this->connection); } return new Statement($stmt); } public function query(string $sql): Result { return $this->prepare($sql)->execute(); } public function quote(string $value): string { return "'" . $this->connection->escape_string($value) . "'"; } public function exec(string $sql): int|string { try { $result = $this->connection->query($sql); } catch (mysqli_sql_exception $e) { throw ConnectionError::upcast($e); } if ($result === false) { throw ConnectionError::new($this->connection); } return $this->connection->affected_rows; } public function lastInsertId(): int|string { $lastInsertId = $this->connection->insert_id; if ($lastInsertId === 0) { throw Exception\NoIdentityValue::new(); } return $this->connection->insert_id; } public function beginTransaction(): void { $this->connection->begin_transaction(); } public function commit(): void { try { if (! $this->connection->commit()) { throw ConnectionError::new($this->connection); } } catch (mysqli_sql_exception $e) { throw ConnectionError::upcast($e); } } public function rollBack(): void { try { if (! $this->connection->rollback()) { throw ConnectionError::new($this->connection); } } catch (mysqli_sql_exception $e) { throw ConnectionError::upcast($e); } } public function getNativeConnection(): mysqli { return $this->connection; } }