我可以强制 php 8.2 函数返回错误代码而不是抛出异常吗?

问题描述 投票:0回答:1

我维护一个网站,不久前用 PHP 编写。它的大部分功能都依赖于返回错误,而不是捕获异常。像这样的东西:

(注意:在以前的 PHP 版本中这是完全可以接受的行为。)

$tbl_nm = "table_name";

$link = @mysqli_connect($HOSTNAME, $USERNAME, $PASSWD);
if($link !== false)
{
    if(@mysqli_select_db($link, $DBNAME))
    {
        $query = "CREATE TABLE `".$tbl_nm."` (".
            $COL_ID." INT AUTO_INCREMENT PRIMARY KEY, ".
            $COL_DATE." DATE, ".
            $COL_TIME." TIME, ".
            $COL_MSG." TINYTEXT".
            ")";
            
        $res = @mysqli_query($link, $query);     //** EXCEPTION RAISED HERE! **
        if($res === false)
        {
            if(mysqli_errno($link) != 1050)    //1050 - if table already exists
            {
                logMySQLErrorReport($link, "Error creating table");
            }
        }

        //....
    }
    else
    {
        logMySQLErrorReport($link, "Error setting db");
    }
}
else
{
    logMySQLErrorReport($link, "Error connecting");
}

现在,共享主机迫使我们将其升级到 PHP 8.2。结果,调用

@mysqli_query
而不是返回错误的行抛出异常:

PHP 致命错误:未捕获的 mysqli_sql_exception:表 'table_name' 已经存在

网站无法加载。

是否有设置强制它返回错误代码而不是抛出异常?

附言。有很多代码就像我上面展示的那样。我不想浪费数周时间用异常处理重写它,因为这种语言/PHP 对我来说几乎已经死了(因为它的维护者的这种确切行为 - 当他们对一些被接受的东西进行彻底的改变时几个版本。)我再也不会用 PHP 编写任何代码了。我只想让这个网站正常工作,而不用花一个月的时间重构完美工作的代码。

php mysqli php-8
1个回答
0
投票

当表不存在时,mysqli_query 函数 (https://www.php.net/manual/en/mysqli.query.php) 不再返回 false。在 PHP 8.0.16 中,返回 false,但在 PHP 8.1.0 和 PHP 8.1.3 中,默认引发异常。 将此添加到您的 php

mysqli_report(MYSQLI_REPORT_OFF);
© www.soinside.com 2019 - 2024. All rights reserved.