Тема: Перехоплення помилок.

Власне є така стуація:
Є скрипт mysqli.class.php
в ному є такий код:

public function Connect()
{
 $DataBase = new mysqli($this->Host,$this->User,$this->Password,$this->DataBaseName);
   if(mysql_errno($DataBase) == 0)
    return $DataBse;
   else
    return "Mysql Error";
}

і по ідеї, якщо виникає помилка при конекті з БД
то має повернути Mysql Error, але цього не відбувається
через те, що помилка "глушить" подальші інтерпритацію
коду.
Як можна зробити, щоб такого не було ?
Пробував різні способи, але нічого не допомогло.

2

Re: Перехоплення помилок.

Можливо так перевіряйте ;)

if (mysqli_connect_error()) {
    die('Connect Error (' . mysqli_connect_errno() . ') '
            . mysqli_connect_error());
}

3 Востаннє редагувалося Пам'ять не може бути READ (17.03.2013 20:47:57)

Re: Перехоплення помилок.

funivan написав:

Можливо так перевіряйте ;)

if (mysqli_connect_error()) {
    die('Connect Error (' . mysqli_connect_errno() . ') '
            . mysqli_connect_error());
}

А тут виходить, що скрипт завершиться, а мені потрібно щоб
він продовжував роботу.
Типу якщо з’єднання пройшло успішно, повертається об’єкт
і йде запит до бд, і тд, а коли помилка, то вертає наприклад код помилки
а інша функція обробяє той код і виводить якусь іншу сторінку чи ще щось.

4 Востаннє редагувалося funivan (17.03.2013 21:06:25)

Re: Перехоплення помилок.

  if (mysqli_connect_error()) {
     my_custom_erro_function(mysqli_connect_error());
  }

це якщо іменно в цьому випадку а та можна користуватись set_error_handler i register_shutdown_function

5 Востаннє редагувалося Invader (17.03.2013 22:41:29)

Re: Перехоплення помилок.

Здається, якщо написати отаке:

error_reporting(0)

перед кодом який може српричинити помилки, то виконання програми продовжиться і можна буде опраювати помилку, якщо вона виникла.
І якщо вже робота з БД відбувається в стилі ООП, то чому б не писати

$DataBase->connect_errno

6

Re: Перехоплення помилок.

Hanter який тип помилки кидає  код?

$DataBase = new mysqli($this->Host,$this->User,$this->Password,$this->DataBaseName);

Фактично по логіці помилка не є фатальною і скрипт дальше буде працювати. так що вам треба тільки перевірити помилку і якщо вона є тоді викликати свою функцію ;)

Re: Перехоплення помилок.

Invader написав:

Здається, якщо написати отаке:

error_reporting(0)

перед кодом який може српричинити помилки, то виконання програми продовжиться і можна буде опраювати помилку, якщо вона виникла.

Так не працює, error_reporting(0) глушить вивід помилки.

8 Востаннє редагувалося Пам'ять не може бути READ (18.03.2013 19:35:06)

Re: Перехоплення помилок.

funivan написав:

Hanter який тип помилки кидає  код?

$DataBase = new mysqli($this->Host,$this->User,$this->Password,$this->DataBaseName);

Фактично по логіці помилка не є фатальною і скрипт дальше буде працювати. так що вам треба тільки перевірити помилку і якщо вона є тоді викликати свою функцію ;)

Тип помилки Warning
Так, скрипт продовжує працювати, а що якщо виникне
Fatal error ?

9

Re: Перехоплення помилок.

Якщо виникне Fatal Error перехоплюйте його через register_shutdown_function і показуйте інформаційну сторінку

Подякували: miroslav.chandler1

10 Востаннє редагувалося Torbins (19.03.2013 14:22:43)

Re: Перехоплення помилок.

А хіба ексепшонами тут не можна розрулити?
Типу:

    public function Connect()
    {
        $DataBase = new mysqli($this->Host,$this->User,$this->Password,$this->DataBaseName);
        if(mysql_errno($DataBase) == 0)
            return $DataBse;
        else
            throw new MyDbException($DataBse);
    }

    public function DoFoo() {
        try {
            Connect()
        } catch (MyDbException $e) {
            echo $e->BuildDbFailMessage();
        }
    }
Подякували: miroslav.chandler1