Niżej zamieszczam klasę odpowiedzialną za połączenie z bazą danych oraz za wykonywanie zapytań sql wraz z generowaniem wyjątków.
Działa tak:
Łączy się z bazą danych za pomocą danych (dekodowanych) z klasy nadrzędnej i to wszystko ładnie działa (prócz wymuszenia wyświetlenia komunikatu o braku połączenia z bazą, przy błędnych danych pokazuje drugi wyjątek o braku bazy dach a nie braku połączenia).
Dodatkowo mam problem z destruktorem (jest jakiś błąd składniowy - dokładnie nie wiem).
Chodzi o to że klasa działa na tej zasadzie że metoda "cos" rozpoczyna transakcje dla tabel innob, natomiast destruktor w razie wykrycia błędu (zostanie zwrócony wyjątek) cofa wszystkie działania wywołane przez obiekt.
Prosiłbym o wskazówki co poprawić w kodzie tak by to było poprawnie wykonane jak na na OOP przystało

class mysqli_db extends masa { public function cos() { // łączymy się z bazą danych IF(!$this->mysqli = new mysqli($this->host, $this->user, $this->password)) { $this->error = true; // W przypadku niepowodzenia połączenia wygeneruj wyjątek throw new Exception('Błąd Połączenia z Bazą Danych - '.$this->mysqli->error, $this->mysqli->errno); } // wybieramy bazę danych IF(!$this->mysqli->select_db($this->database)) { $this->error = true; // W przypadku niepowodzenia wybrania bazy wygeneruj wyjątek throw new Exception('Nie można wybrać bazy danych - '.$this->mysqli->error, $this->mysqli->errno); } // ustawiamy "tryb" transakcji dla tabel InnoDB $this->mysqli->autocommit(false); $this->mysqli->query('SET AUTOCOMMIT = 0'); $this->mysqli->query('BEGIN'); } // Wykonywanie zapytań nie zwracających wartości (nie-Select) public function query($query) { { IF(!$result = $this->mysqli->query($query)) { $this->error = true; throw new Exception('Błąd wykonania zapytania - ('.$query.') - '.$this->mysqli->error, $this->mysqli->errno); } else { return true; } } } // Zapytania z SELECT zwrócą nam od razu tablicę asocjacyjną z wynikami public function query_select($query) { IF(!$this->error) { IF(!$result = $this->mysqli->query($query)) { $this->error = true; throw new Exception('Błąd wykonania zapytania - ('.$query.') - '.$this->mysqli->error, $this->mysqli->errno); } while($row = $result->fetch_assoc()) { $return[] = $row; } return $return; } } // ID pola autoincrement użyte w ostatnim zapytaniu INSERT public function insert_id() { return $this->mysqli->insert_id; } public function escape($string) { return $this->mysqli->real_escape_string($string); } // Destruktor, w przypadku błędów wszystkie zmiany będą cofnięte public function __destruct() { IF(!$this->error) { $this->mysqli->query('COMMIT'); } else { $this->mysqli->query('ROLLBACK'); } } } try { $ms = new mysqli_db(); $ms->cos(); $ms->query("*"); } catch (Exception $error) { echo '<b>Komunikat</b>: '.$error->getMessage().'<br /><b>Plik</b>: '.$error->getFile().'<br /><b>Wiersz</b>: '.$error->getLine().'<br /><b>IP</b>: '.$_SERVER['REMOTE_ADDR'].' | <b>LINK</b>: '.$_SERVER['REQUEST_URI'].'<br /><br />'.$error->getTraceAsString(); }