Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: try catch
 
 автор: Гавриленко Дмитрий   (06.06.2011 в 02:04)   письмо автору
 
 

Прочитав статьи и раздел в книге по этой теме, я понял, что это чудо способно предотвращать вывод сообщений об ошибках и вместо этого сделать что-то иное.
Принцип типа or die() но при этом компиляция не останавливается, а продолжает выполняться дальше.

Вот к примеру!


<?php
try {
    
mysql_connect(123243); //Беру ложно подключение к базе! При этом ....
} catch (Exception $e) {
    echo 
$e->getLine(); // .... должно вывести только номер лини, в которой ошибка...
}
?>



.... но выводит мне
Warning: mysql_connect() [function.mysql-connect]: Can't connect to MySQL server on '12' (10051) in D:\site\localhost\www\tests\try-catch.php on line 3

Какого....?

Почему?
Может еще не введено в PHP Version 5.2.9?

  Ответить  
 
 автор: Саня   (06.06.2011 в 05:52)   письмо автору
 
   для: Гавриленко Дмитрий   (06.06.2011 в 02:04)
 

Эта функция не генерирует исключений. Чтобы поймать этот тип ошибок нужно использовать set_error_handler()
<?
function error_handler($errno$errstr$errfile$errline$errcontext) {
  print 
$errline;
}
set_error_handler('error_handler');

mysql_connect('l''ab''cd');

  Ответить  
 
 автор: Гавриленко Дмитрий   (06.06.2011 в 12:22)   письмо автору
 
   для: Саня   (06.06.2011 в 05:52)
 

Ооо спасибо... Надо уделить под это время!

  Ответить  
 
 автор: cheops   (06.06.2011 в 09:33)   письмо автору
 
   для: Гавриленко Дмитрий   (06.06.2011 в 02:04)
 

Это происходит лишь в том случае, если функци генерирует исключения. Библиотека mysql этим не занимается, именно поэтому для неё часто пишут обертку, которая берет на себя преобразования сообщений об ошибках в генерацию исключений (это пожалуй единственно оправданный случай, когда стоит писать собственную библиотеку работы с MySQL).

  Ответить  
 
 автор: Гавриленко Дмитрий   (06.06.2011 в 17:23)   письмо автору
 
   для: cheops   (06.06.2011 в 09:33)
 

Приведите пожалуйста актуальный пример использования блоков try catch

  Ответить  
 
 автор: psychomc   (06.06.2011 в 17:44)   письмо автору
 
   для: Гавриленко Дмитрий   (06.06.2011 в 17:23)
 


<?php
class cls
{
    public function 
query($query) {
       if (!
mysql_query($query)) {
            throw new 
exception("error");
       }
    }
}

try {
    
$obj = new cls();
    
$obj->query"SELECT * FROM ...");
} catch (
$e) {
    echo(
$e);
}
?>


управлять выводом исключений можно извне

  Ответить  
 
 автор: Гавриленко Дмитрий   (06.06.2011 в 18:07)   письмо автору
 
   для: psychomc   (06.06.2011 в 17:44)
 



<?php
mysql_connect
('localhost','root',12345);
class 
cls 

    public function 
query($query) { 
       if (!
mysql_query($query)) { 
            throw new 
exception("Ошибка SQL запроса"); 
       } 
    } 


try { 
    
$obj = new cls(); 
    
$obj->query("SELECT * FROM test"); 
} catch (
Exception $e) { 
    echo(
$e->getMessage()); 

?>



Спасибо за помощь!

  Ответить  
 
 автор: Гавриленко Дмитрий   (06.06.2011 в 18:52)   письмо автору
 
   для: Гавриленко Дмитрий   (06.06.2011 в 02:04)
 

Кстати мне больше понравился пользовательский обработчик исключений!
Спасибо еще раз САНЕ и всем кто мне еще помогал!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования