Witam
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(!ereg('SELECT', $query) and
!$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);
}
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(); }