Экземпляр класса выдает внутреннюю ошибку сервера 500 (PHP, MYSQLi)

У меня странная ситуация.

Когда экземпляр класса передается методу, а экземпляр класса не был установлен, сервер выдает ошибку 500 вместо того, чтобы перехватывать ошибку.

Это происходит во время тестирования в 99 % случаев, но я хочу убедиться, что пользователь никогда не увидит этого в течение этого 1 %

Кстати: я уже проверил свои файлы .htaccess и apache2 ‹= они верны

Что мне нужно изменить в моем файле php.ini или что-то подобное, чтобы избежать ошибки 500 каждый раз, когда это происходит??

Вот пример кода:

<?php

function querysomething ($connection_to_mysql, $query) {
  try {
    $query = $connection_to_mysql->prepare("SELECT * FROM table WHERE name=?");
    $query->bind_param("s", $name);
    $execute = $query->execute();
    //etc...
    if (!$execute) {
      throw new Exception ("some error");
    }
  } catch (Exception $e) {
    //some error handling
  }
}

?>

Если экземпляр объекта $connection_to_mysql не создан, сервер выдает ошибку 500

Нужно ли каждый раз перед запросом проверять, действительно ли существует $connection_to_mysql?


person mlishn    schedule 08.08.2012    source источник
comment
500 в этом случае обычно является ошибкой выполнения в PHP. Включите параметр ini display_errors, и вы сможете увидеть, в чем заключается фактическая ошибка.   -  person Explosion Pills    schedule 08.08.2012
comment
У меня так (при тестировании): error_reporting(E_ALL); ini_set('display_errors','On'); Мне просто интересно, могло ли это произойти даже после того, как я исправлю ошибки. Я не хочу, чтобы мои пользователи получали 500   -  person mlishn    schedule 08.08.2012
comment
тогда каково фактическое сообщение об ошибке?   -  person Explosion Pills    schedule 08.08.2012
comment
Меня нет рядом с моей рабочей областью, но обычно это фатальная ошибка, когда объект mysqli не найден или какой-то другой объект не найден. Когда эти ошибки происходят из-за опечатки, не созданного соединения с базой данных или чего-то еще, я тут же обрабатываю их. Меня беспокоит следующее: Если соединение с базой данных потеряно и экземпляр объекта не создан, а затем передан функции, она выдаст ошибку 500. Мне нужен способ как-то обработать ошибки 500 (перенаправить страницу или что угодно -- я пробовал в apache, но он не перенаправляется)   -  person mlishn    schedule 08.08.2012


Ответы (2)


Используйте set_error_handler/set_exception_handler для отображения страницы с фатальной ошибкой php.

person Explosion Pills    schedule 08.08.2012
comment
Я провел некоторое исследование, и оно не обрабатывает (E_ERROR), поэтому рекомендуется использовать register_shutdown_functions. Я включил ответ со ссылкой ниже. Спасибо за помощь, я что-нибудь напишу с вашим set_error_handler/set_exception_handler и ссылкой ниже - person mlishn; 08.08.2012

Прочитав дополнительное чтение о ловле Fatal Errors, я могу прочитать следующее: Как Я обнаружил фатальную ошибку PHP

Вместо использования set_error_handler и set_exception_handler для обнаружения всех ошибок и обработки послесловий используйте register_shutdown_functions.

Это позволит вам перенаправить на страницу (например: 500.php или что-то еще), зарегистрировать ошибку и при желании отправить электронное письмо.

person mlishn    schedule 08.08.2012