|
|
|
| Прочитав статьи и раздел в книге по этой теме, я понял, что это чудо способно предотвращать вывод сообщений об ошибках и вместо этого сделать что-то иное.
Принцип типа or die() но при этом компиляция не останавливается, а продолжает выполняться дальше.
Вот к примеру!
<?php
try {
mysql_connect(12, 32, 43); //Беру ложно подключение к базе! При этом ....
} 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 в 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 в 05:52)
| | Ооо спасибо... Надо уделить под это время! | |
|
|
|
|
|
|
|
для: Гавриленко Дмитрий
(06.06.2011 в 02:04)
| | Это происходит лишь в том случае, если функци генерирует исключения. Библиотека mysql этим не занимается, именно поэтому для неё часто пишут обертку, которая берет на себя преобразования сообщений об ошибках в генерацию исключений (это пожалуй единственно оправданный случай, когда стоит писать собственную библиотеку работы с MySQL). | |
|
|
|
|
|
|
|
для: cheops
(06.06.2011 в 09:33)
| | Приведите пожалуйста актуальный пример использования блоков try catch | |
|
|
|
|
|
|
|
для: Гавриленко Дмитрий
(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);
}
?>
|
управлять выводом исключений можно извне | |
|
|
|
|
|
|
|
для: 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 в 02:04)
| | Кстати мне больше понравился пользовательский обработчик исключений!
Спасибо еще раз САНЕ и всем кто мне еще помогал! | |
|
|
|