如果未启用mysqli,PHP不会抛出异常

时间:2016-08-08 20:35:30

标签: php mysqli php-7

我有

<?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未启用,则它不会捕获错误:

  

致命错误:未捕获错误:在C:\ test \ db_connect.php中找不到类'mysqli':8
      堆栈跟踪:
      #0 C:\ test \ getContacts.php(2):require_once()
      在行 8

C:\ test \ db_connect.php 中抛出#1 {main}

我能做些什么来捕获错误?

我试过这个,但它不起作用:

<?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()
        )
    );
}

这个没有停止,继续执行脚本。

  

{“msg”:“mysqli未启用”}   注意 99 C:\ test \ getContacts.php 中的未定义变量:mysqli       
      致命错误:未捕获错误:在C:\ test \ getContacts.php中调用null上的成员函数query():99       堆栈跟踪:       #0 {main}         在 99

C:\ test \ getContacts.php 投掷

2 个答案:

答案 0 :(得分:7)

奇怪的是它不会被安装但如果你自己滚动我想它可以省略。我会检查程序功能是否存在

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

答案 1 :(得分:2)

问题标记为php-7:可以捕获php 7中的错误,但它不会从Exception继承,因此您必须以不同的方式捕获它们:

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

有关error handling in php 7的详细信息,请参阅手册。