PHP не генерирует исключение, если mysqli не включен

У меня

<!--?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
require_once "configuration.php";
header('Content-Type: application/json');
try
{ 
 $mysqli = new mysqli(MYSQL_SERVER, MYSQL_USERNAME, MYSQL_PASSWORD, MYSQL_DATABASE);
 $mysqli--->set_charset("utf8");
} catch (Exception $e) {
 echo json_encode(
 array(
 'msg' => $e->getMessage()
 )
 );
}

И если mysqli не включен, он не поймает ошибку:

Неустранимая ошибка: Неиспользуемая ошибка: класс 'mysqli' не найден в C:\test\db_connect.php: 8     Трассировка стека:     # 0 C:\test\getContacts.php(2): require_once()     # 1 {main} брошен в C:\test\db_connect.php в строке 8

Что я могу сделать так, чтобы он обнаружил ошибку?

Я пробовал этот, но он не работал:

<!--?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
require_once "configuration.php";
header('Content-Type: application/json');
try
{
 if(!extension_loaded('mysqli'))
 {
 throw new Exception('mysqli is not enabled');
 }
 $mysqli = new mysqli(MYSQL_SERVER, MYSQL_USERNAME, MYSQL_PASSWORD, MYSQL_DATABASE);
 $mysqli--->set_charset("utf8");
} catch (Exception $e) {
 echo json_encode(
 array(
 'msg' => $e->getMessage()
 )
 );
}

Это не останавливается, продолжает выполнение script.

{ "msg": "mysqli не включен" } Примечание: Undefined variable: mysqli in C:\test\getContacts.php в строке 99 Неустранимая ошибка: Неиспользуемая ошибка: вызов функции-функции-члена() в null в C:\test\getContacts.php: 99     Трассировки стека:     # 0 {main}       брошен в C:\test\getContacts.php в строке 99

2 ответа

Странно, что он не будет установлен, но если вы катитесь самостоятельно, я думаю, это можно было бы опустить. Я бы проверял, существуют ли процедурные функции

if(!function_exists('mysqli_connect')) {
 throw new Exception('mysqli is not enabled');
}


По мере того как вопрос помечен php-7: ошибка в php 7 может быть обнаружена, но она не наследуется от Exception, поэтому вам придется поймать их по-другому:

...
} catch (Error $e) {
 ^^^^^ Not Exception
 echo json_encode(
 array(
 'msg' => $e->getMessage()
 )
 );
 // stop execution
 exit;
}

Дополнительную информацию о обработке ошибок в php 7 см. в руководстве.

licensed under cc by-sa 3.0 with attribution.