【问题标题】:Handling DB error in PHP在 PHP 中处理数据库错误
【发布时间】:2011-04-30 20:42:06
【问题描述】:

大家好!
我正在用 PHP 构建一个使用 MySql DB 的 webapp。例如,我想要做的是当有人试图访问一个页面,但数据库抛出一个错误,以显示一个带有 HTTP 代码 500 的 HTML(或重定向)页面。类似于 Twitter 中的“失败鲸鱼”。 这可能吗?

【问题讨论】:

    标签: php mysql database error-handling


    【解决方案1】:

    您可以使用 PHP 中的 die 函数来执行此操作。

    mysql_connect("details go here")or die(require("failed.php"));
    

    这将尝试连接到您的数据库,如果它失败将需要另一个文件,您还可以创建一个重定向用户的函数并将其粘贴在 die() 函数中,然后简单地将它们重定向到另一个页面,无论哪种方式都是这样您会在连接出错时将用户赶走。

    【讨论】:

    • 但是如果我这样做,并且 failed.php 有 header("Location /path/to/anything"); 它输出“无法修改标头信息 - 标头已发送”
    • 你可以使用 JavaScript 或元标记来重定向,所以将函数名放在括号内,然后执行以下操作 - function redirect(){ echo 'example.com/failed.php">' }
    • 首先输出 php 生成标头并将它们发送给客户端。如果你做了任何输出然后尝试做一个 header() 那么你会得到你刚刚得到的错误
    【解决方案2】:

    如果 mysql 中有错误,它将返回 FALSE 而不是资源。然后,您可以执行以下操作来测试和有条件地重定向:

    // This also works for mysql_connect( ... ); and all other <dbtype>_<command> 
    // functions, including MySQLi, Oracle, and PSQL extensions.
    $cond = mysql_query( $resource, $query );
    if( $cond === FALSE )
    {
        // You can replace this with any other error handling you'd like.
        header( "Location: url/of/error/page" );
        die();
    }
    

    【讨论】:

    • SELECT * FROM pages WHERE name='Bunny' 据我所知不会是错误,因此会返回 true。如果他的数据库中没有匹配的行,我认为 OP 想知道如何重定向
    • @ITroubs 如果他有另一种情况,即数据库没有抛出错误(这是 OP 的问题),那么他可以替换 $cond === FALSE使用 mysql_count_rows( $cond ) == 0 之类的东西。但是,这不是他问的问题。
    • 他的问题的提法确实有点误导
    猜你喜欢
    • 2012-04-13
    • 2016-04-11
    • 2011-11-03
    • 1970-01-01
    • 2019-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    相关资源
    最近更新 更多