Kohana Catch veritabanı istisna

3 Cevap php

Ben Kohana 2 kullanıyorum. Isterim sunucuya bağlantı kurulamadığı zaman bir hata sayfası önlemek için bir veritabanı durum yakalamak için.

Görüntülenen hata

system/libraries/drivers/Database/Mysql.php [61]:

mysql_connect() [function.mysql-connect]: Lost connection to MySQL server at
'reading initial communication packet', system error: 110

Veritabanı sunucusu, bu noktada tüm ulaşılabilir değildir.

Ben bir model yapıyorum. Ben de denedim

public function __construct()
{
    // load database library into $this->db
    try
    {
        parent::__construct();
    }
    catch (Exception $e)
    {
        die('Database error occured');
    }
}

hem de

try
{
    $hoststatus = $this->db->query('SELECT x FROM y WHERE z;');
}
catch (Exception $e)
{
    die('Database error occured');
}

... Ama bunların hiçbiri işe gibiydi. Istisna ana modelden geçti alır gibi görünüyor. Veritabanı hatası yakalamak ve kendi hata işleme kullanmak için başka bir yolu var mı?

3 Cevap

Kohana 2 istisnalar içine hataları dönüştürmek değildir. Ya kendi hata işleyicisi iliştirmek, ya da daha sonra kendinizi ele çeşit yapmak error_reporting() (geçici) hatayı kapatmak için kullanmanız gerekecektir.

Sen istisnayı da yakalayabilir, ama muhtemelen yanlış yerde onu yakalamak için çalışıyoruz. Bir istisna olduğunu, düşük düzeyini yakalamak için çalışırken sorun birçok farklı kaynaklardan kökenli olmasıdır.

Eğer oturumları için veritabanı sürücüsünü kullanabilirsiniz Örneğin, bu istisna (herhangi bir model örneğini önce muhtemelen olur oturumunda bir çağrı örneği) oturum kütüphanede veritabanı sürücüsünün örnekleme itibaren atılır.

Bu istisnayı yakalamak can model olur, ama başka bir kaynaktan gerçekleşmesi olasılığı daha yüksektir - muhtemelen birkaç kütüphaneleri uzatmak zorunda, ya da bir baz model {[sarma emin olacaktır ki bu durumda bir try-catch bloğu içinde (1)]} çağrı ve oturum kütüphane.

(Ben şahsen yerine baz modelinde koyarak bunu Model kütüphane uzanacak)

Umut olur.

Ben Kohana bilmiyorum, ama bir try .. catch bloğu sadece Exception s, normal hataları yakalamak değil. Eğer Kohana Exception Eğer Exception s almak için bekliyoruz nereye s atar emin misiniz?

Edit based on you comments:
Well, first of all, in a production environment (meaning your live application) you should always disable the displaying of PHP errors to the screen. Displaying of these errors to the screen should only be done in a development environment to inform you, the developer. Visitors of your live application however have no business in knowing/reading PHP errors, as it might disclose sensitive information about your environment. You should however log the errors to a log file.

Ayrıca, ben sadece Kohana hızlı bir göz attım ve gerçekten burada görmek ve orada İstisnalar atılır, ama tutarlı bir şekilde bunu yapmak için görünmüyor.

Eğer php hataları İstisnalar bir görünüm örnek # 1 gibi tedavi olmak istiyorsanız this documentation.