PHP更优雅的方式来处理mysqli错误

时间:2013-02-10 15:41:42

标签: php error-handling mysqli

使用纯PHP代码(而不是框架)有一种更优雅的方式来处理mysqli错误,如下所示:

if (!mysqli_query($con, $sql)) {
            # Throw error so we can handle them
            echo mysqli_error($con);

            # handle a duplicate email
            if (strpos(mysqli_error($con), "email_UNIQUE") !== false ) {
                    $_SESSION["errors_found"] = true;
                    array_push($_SESSION["error_messages"], "Email given is already registered.");
            }

            # handle a duplicate username
            else if (strpos(mysqli_error($con), "username_UNIQUE") !== false ) {
                    $_SESSION["errors_found"] = true;
                    array_push($_SESSION["error_messages"], "Username is already taken.");
            }

            # handle any other sql query error...
           else {
                die("Database query error: " . mysqli_error($con));
            }
    }

1 个答案:

答案 0 :(得分:0)

首先,我不会将这样的过程称为“处理mysqli错误”,而是“用户输入验证”。
其次,我根本不会以这种方式进行这样的验证。

我一直认为,通常使用SELECT查询而不是INSERT查询来验证针对数据库的用户输入 它不仅可以使您的应用程序无错误,还可以使其更加灵活,例如允许对基于AJAX的注册进行单独验证。

至于真正的mysqli错误 - 你真的必须处理它们,而不仅仅是死亡。
最方便又简单的方法就是抛出异常:

if (!mysqli_query($con, $sql)) {
    throw new Exception(mysqli_error($con));
}

将根据站点范围的错误处理设置正确处理,并提供无价的跟踪日志。