php 如果数据库相关内容是可选的,如何显示错误并加载页面的其余部分?

xdnvmnnf  于 2023-04-19  发布在  PHP
关注(0)|答案(3)|浏览(103)

My .php包含quote.php,然后是页面的其余部分。当连接失败时,我看到以下错误:

Fatal error: Uncaught mysqli_sql_exception: ----- include_once('C:\\xampp\\htdocs...') ----

并且不加载页面的剩余部分。
我必须做什么才能显示错误消息,然后继续加载页面的其余部分?

llycmphe

llycmphe1#

您的情况是使用try catch是合理的罕见情况。
所有你需要做的就是将include Package 在try-catch中:

try {
    require 'quote.php';
} catch(\Throwable $e) {
    error_log($e); // for the future inspection
    echo "Problem loading this part of page";
}

这就是全部。错误信息将被显示,页面的其余部分将被加载。
当然,这种方法只应该在quote.php的内容是可选的时候使用,在其他情况下,必须没有本地的try-catch,而是一个站点范围的错误处理程序。

qyswt5oh

qyswt5oh2#

php / msqli正在抛出异常。您需要在程序中编写异常处理程序代码(try { } catch (mysqli_sql_exception $e) { }代码)来处理错误。
作为一个快速和简单的工作区,你可以把这行代码放在页面的顶部

mysqli_report(MYSQLI_REPORT_OFF):;

这将抑制php异常和警告,并让您完全依赖mysqli_connect_errno()来捕获错误。

ttygqcqt

ttygqcqt3#

使用@O. Jones的想法和一些讨厌的后藤,这就完成了这项工作。警告和错误仍然显示。页面的其余部分现在可以加载了。

<?php
    mysqli_report(MYSQLI_REPORT_OFF);
    $dbServer =   "localhost";
    $dbUsername = "root";
    $dbPassword = "";
    $dbName =     "project_01";
    $conn = mysqli_connect($dbServer, $dbUsername, $dbPassword, $dbName);
    // Check connection
    if (mysqli_connect_errno())
    {
    echo "Failed to connect to the MySQL Database: ";
    goto end;
    }
    $sql = "SELECT * FROM  tbl_quotes";
    if ($result=mysqli_query($conn,$sql))
        {
        // Return the number of rows in result set
        $rowcount=mysqli_num_rows($result);
        $rand = random_int(1,$rowcount);
        } else {
            echo "No records were found";
            goto end;
            }
    $sql = "SELECT quote, credit FROM  tbl_quotes where ID = $rand";
    if ($result = mysqli_query($conn, $sql)) {
        // Fetch one and one row
       while ($row = mysqli_fetch_row($result)) {
       printf ("%s" . " - " . "(%s)\n", $row[0], $row[1]);
       }
        // Free result set
        mysqli_free_result($result);
        }
    end:
?>

感谢所有看过的人。

相关问题