【问题标题】:Displaying appropriate error messages for users为用户显示适当的错误消息
【发布时间】:2011-07-23 09:53:18
【问题描述】:

更新 1:

我现在有以下代码:

} catch( PDOException $e ) {
    error_log( $e -> getMessage() );

    switch( $e -> getCode() ) {
        case 1452:
            echo "Sorry, the referral ID you have entered does not exist.";
            break;
        default:
            echo $e -> getMessage();      
    }
}

但它一直给我以下错误:

SQLSTATE[23000]:完整性约束 违规:1452 无法添加或更新 子行:外键约束 失败(database1.table2,CONSTRAINT fk_referals_users1 外键 (users_id) REFERENCES users (id) ON 更新时删除无操作无操作)

难道不应该给我

抱歉,您拥有的推荐 ID 输入的不存在。

因为它将默认:显示完整的 1452 错误。既然是1452的错误,那不应该是1452的情况吗?

原始问题:

我有以下脚本是为开发目的而设置的。当它上线时,我想显示更合适的错误消息。

SQLSTATE[23000]:完整性约束 违规:1452 无法添加或更新 子行:外键约束 失败(database1.table2, 约束fk_referals_users1 外键 (users_id) 参考 users (id) 删除 无操作 更新无操作)

如果他们输入的引用值在table1中不存在,则会发生这种情况,因此由于限制,它无法插入到table2中。

这是我目前拥有的脚本。如何捕获像上面这样的特定消息以及更多消息,并将它们显示为:

抱歉,您拥有的推荐 ID 输入的不存在。

这是我试图根据友好错误消息编辑的部分:

try {
    $DBH = new PDO( "mysql:host=localhost;dbname=database1", "user", "pass" );
    $DBH -> setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

    $STH = $DBH -> prepare( "insert into database1.table1 (display_name, email, password) values ( :display_name, :email, :password )" );

    $STH -> bindParam( ':display_name', $_POST['display_name'], PDO::PARAM_STR, 100 );
    $STH -> bindParam( ':email', $_POST['email'], PDO::PARAM_STR, 100 );
    $STH -> bindParam( ':password', $_POST['password'], PDO::PARAM_STR, 100 );

    $STH -> execute();

    try {
        $STH = $DBH -> prepare( "insert into database1.table ( username, status, users_id ) values ( :username, :status, :users_id )" );

        $strStatus = 1;

        $STH -> bindParam( ':username', $_POST['display_name'], PDO::PARAM_STR, 100 );
        $STH -> bindParam( ':status', $strStatus, PDO::PARAM_INT, 1 );
        $STH -> bindParam( ':users_id', $_POST['referer'], PDO::PARAM_INT, 1 );

        $STH -> execute();
    }

    $DBH = null;

    header( "Location: ".$_SERVER['PHP_SELF'] );
    exit;
} catch( PDOException $e ) {
    echo $e -> getMessage();
}

【问题讨论】:

  • 请参阅原始问题中的 UPDATE 1:

标签: php mysql error-handling pdo


【解决方案1】:

这里正在输出完整的异常消息:

catch( PDOException $e ) {
    echo $e -> getMessage();
}

您可以在此处记录完整的异常,并回显您喜欢的任何消息

catch( PDOException $e ) {
    error_log($e -> getMessage());
    echo "A error has occurred";
}

如果你想处理不同的错误信息,你可以打开错误代码

catch( PDOException $e ) {
    error_log($e -> getMessage());
    switch($e->getCode()){
        case 23000:
            echo "Sorry, the referral ID you have entered does not exist."
            break;
        default:
            echo "A error has occurred";        
    }
}

【讨论】:

  • 什么是“error_log($e -> getMessage());”做?它是否将错误消息放在 apache 日志文件中?
  • 请参阅原始问题中的 UPDATE 1:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-18
  • 2018-05-07
  • 1970-01-01
  • 2015-05-26
  • 2020-01-02
  • 2017-07-16
相关资源
最近更新 更多