Bir arkadaşıma okulda hocası böyle bir ödev vermiş.. Mysqli sınıfından türetilmiş yeni bir DB sınıfı istiyordu kendisinden. Ne yaparım ne ederim diyordu ki bende ona bir örnek hazırladım en hızlı kısa ve basit yoldan..
Atla deve bişey yapmıyor sınıfımız, sadece log tutuyoruz ve kendi exception larımızı döndürüyoruz.
Kullanımı:
<?php /** * Onur Canalp * Mysqli DB bağlantı ve hata sınıfımız.. Basit anlamda örnek olması için.. */ /* * MySQL Server a bağlantıda hata yaşarsak bu Exception sınıfından türettiğimiz hatayı döndüreceğiz. */ class DBConnectException extends Exception { public function __construct($error, $errno = 0) { parent::__construct($error, $errno); } } /** * DB Query Exception class * * SQL sorgumuzu çalıştırırken oluşan hatalar için bu sınıfı kullanacağız.. */ class DBQueryException extends Exception { public function __construct($error, $errno = 0) { parent::__construct($error, $errno); } } /** * mysqli sınıfından türettiğimiz DB sınıfımız * */ class Database extends mysqli { /** * __construct overwrite edelim. Bağlantı hataları durumunda Hata durumunda DBConnectException ları tutacağız * * @param string $host MySQL Host * @param string $user MySQL Kullanıcı Adı * @param string $pass MySQL Parola (password kullanmamak için null kullanın) * @param string $db MySQL Bağlanacağımız Veritabanı adı (kullanmamak için null kullanın) * @param string $port MySQL Bağlanacağımız port (kullanmamak için null kullanın) * @param string $socket MySQL Kullanılacak soket (kullanmamak için null kullanın) * @throws DBConnectException */ public function __construct($host = 'localhost', $user = null, $pass = null, $db = null, $port = null, $socket = null) { @parent::__construct($host, $user, $pass, $db, $port, $socket); if ($this->connect_errno != 0) { // Hata olursa DBConnectException döndüreceğiz error message ve error code ile throw new DBConnectException($this->connect_error, $this->connect_errno); } } /** * Query metodumuz * * @param string $sql Çalıştırılacak SQL sorgusu * @return mysqli_result Object * @throws DBQueryException */ public function query($sql) { // sql.log dosyamızda log tutacağız file_put_contents('/tmp/sql.log', $sql . "\n", FILE_APPEND); // query çalıştırılırken, parent query metodumuzu çağırıyoruz yani mysqli sınıfında ki // @ operatorü ile çağırdık gib gelebilecek hataları temizleyelim $result = @parent::query($sql); // errno set edilmiş mi varmı bakalım if ($this->errno != 0) { // kendi DBQueryException ımızı hata mesajı ve hata numarası ile döndürelim throw new DBQueryException($this->error, $this->errno); } // Herşey düzgünse mysqli_result object ini döndürelim return $result; } }
Sınıfın kullanımı ve kaynak koda direk erişebileceğiniz github adresi:
https://github.com/onurcanalp/mysqli_extended
Açıklayıcı olabilmesi için yorum satırları ile hazırladım, işinizi görmesini umarım.
Kolay gelsin….