![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Logree |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 22.11.2006 Где: Самара Репутация: нет Всего: 2 |
есть такой класс
(я честно говоря не знаю содержаться ли ошибки из mysqli_connect_error() в mysqli_error() написал так) myException
далее делаем ошибку(неверный пароль)
вылезло
Почему? Может я не до конца понимаю как это должно работать? Объяснения. Это сообщение отредактировал(а) Logree - 15.6.2008, 17:02 -------------------- Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд. |
||||||
|
|||||||
| Feldmarschall |
|
|||
|
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
А чего ты ждал?
|
|||
|
||||
| Logree |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 22.11.2006 Где: Самара Репутация: нет Всего: 2 |
Я ждал что появится Строка ошибки и её код
(Эта строка появляется в любом случае) при отключенных display_errors не показывает ничего! но ведь произошла исключительная ситуация значит код ошибки должен быть в классе Exception. почему не так так? -------------------- Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд. |
|||
|
||||
| krundetz |
|
|||
![]() Вечный странник ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1400 Регистрация: 14.6.2007 Где: НН(Сормово) Репутация: 20 Всего: 69 |
В исключениях не передается никакого кода ошибке обычно на каждую ошибку создается свой класс исключение, тоесть само возникновение именно такой исключительной ситуации и являеется указанием на ошибку. Обычно в более развитых языках делается так.
Рекомендую прочитать про исключения поподробнее. Насколько я в курсе mysqli как раз удостаивался коритики за то что там одно исключение на все случае. Да возможно вам поможет метод toString() Это сообщение отредактировал(а) krundetz - 15.6.2008, 19:14 |
|||
|
||||
| Glip |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 473 Регистрация: 30.12.2006 Репутация: 7 Всего: 18 |
а почему он там должен быть? откуда система знает что нужно генерировать именно MySqliException и если на то пошло Exception вообще. Хотите вместо ошибок исключения? Определяйте свой обработчик ошибок set_error_handler() Добавлено через 1 минуту и 14 секунд в php тоже так делается |
|||
|
||||
| Logree |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 22.11.2006 Где: Самара Репутация: нет Всего: 2 |
Что-то я совсем запутался, я думал что конструкция
при наличие ошибки в блоке try помещает все её(ошибки) составляющие в объект Exception: строку, код, файл, line а далле выполняется блок catch... но если это не так зачем тогда нужно исключение если можно пример. а чем это отличается от
?
ну так как Exception встроенно, а MySqliException я includ'ил, из php.net
Тут же тоже самое что и у меня... или я снова не понял чего то? Это сообщение отредактировал(а) Logree - 15.6.2008, 21:02 -------------------- Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд. |
||||||||
|
|||||||||
| DizelGenerator |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 15.6.2008 Репутация: 1 Всего: 1 |
Добрый вечер!
Библиотека Mysqli не генерирует исключений, нет. Сама она их не генерирует, поэтому и поймать их в блоке catch не удастся. Выход видится неплохой: расширяете класс mysqli и "вбрасываете" исключения там, где вам необходимо, а потом уже их ловите например:
Соответственно, вам придется определить и класс myCoolMysqliException, хотя бы таким нехитрым образом:
Вуаля, ловите исключения при коннекте сколько хотите. |
||||
|
|||||
| krundetz |
|
|||
![]() Вечный странник ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1400 Регистрация: 14.6.2007 Где: НН(Сормово) Репутация: 20 Всего: 69 |
В конструкцию try обычно помещаются действительно код который может вызвать исключения только эти исключения могут быть разных видов и для их обработки необходимо множество catch. В блоке где возможна исключительная ситуация не помешается информация в исключение а создается новое исключение и выкидывается конструкцией throw на верх где может быть обработана. Делается это для того чтобы была возможность все ощибки обработать на наиболее удобном для этого уровне программы(во всяком случае это для меня наиболее ценный аргумент в пользу исключений). В общем опять советую почитать теоретическую часть и посмотреть примеры работы с исключениями.
|
|||
|
||||
| Logree |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 22.11.2006 Где: Самара Репутация: нет Всего: 2 |
2DizelGenerator
Тоесть "ловля" не получается только для mysqli, значит если я напишу вот так
все будет нормально? интересный пример... ноя думаю для mysqli проще будет обойтись ИФОМ и mysqli_connect_error/no -------------------- Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд. |
|||
|
||||
| DizelGenerator |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 15.6.2008 Репутация: 1 Всего: 1 |
Если как вы написали - снова ничего не поймаете, потому что fopen исключений тоже не генерирует, а генерирует ошибку типа Warning. Понимаете, если исключение не "вбросилось", его невозможно поймать. Практически все стандартные функции php исключений не бросают. Поэтому бросать их надо самому. Напишите так (продолжая наш пример с мускули):
И вот тогда, если произойдет ошибка при попытке подключиться к базе, вбросится исключение MyCoolMysqliException, которе вы успешно и поймаете. Второй блок catch привел для примера, он ловит все исключения, которые не были пойманы предыдущими блоками catch. |
||||
|
|||||
| Logree |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 22.11.2006 Где: Самара Репутация: нет Всего: 2 |
ВСЁ наконец дошло спасибо всем. особенно DizelGenerator - разжевал.
-------------------- Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд. |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |