PHP mysqli 最佳实践错误处理

PHP mysqli best practice error handling

我是 PHP 和 mysqli 的新手,我已经使用此 PHP 代码成功连接到我的 MySQL 数据库:

<?php
function connect(){
    define('DB_USER', 'my_user');
    define('DB_PASSWORD', 'my_pw');
    define('DB_HOST', 'my_host');
    define('DB_NAME', 'my_name');

    global $db_conn;
    $db_conn = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

}

function disconnect(){
    mysqli_close($db_conn);

}

addUser($username, $password, $role){
    openConnection();
    global $db_conn;
    //Formulate the query
    $q = "INSERT INTO users VALUES ('$username', '$password' , '$role')";
    //query database
    mysqli_query($db_conn, $q);
    closeConnection();
}

我想知道错误处理:PHP 中是否有数据库错误处理的最佳实践? 我在想:

addUser($username, $password, $role){
    openConnection();
    global $db_conn;
    //Formulate the query
    $q = "INSERT INTO users VALUES ('$username', '$password' , '$role')";
    //query database, return feedback to the caller
    $feedback = mysqli_query($db_conn, $q);
    closeConnection();
    return $feedback;
}

$feedback = addUser('name','pw','role'); 
if($feedback == "Error"){
//Display error to user
}

如果数据库连接失败,应该有类似的东西来处理。谁能帮我找到 PHP 中数据库相关错误处理的最佳实践?

编辑:阅读评论后,我从我的代码中删除了所有“@”字符,因为它们抑制了 PHP 产生的警告。

使用 @ 运算符,您可以抑制查询错误(请参阅 http://php.net/manual/de/language.operators.errorcontrol.php). As mentioned in the comments, you should really checkout an object oriented way of doing database operations (you may want to take a look at http://php.net/manual/de/class.mysqli.php or http://php.net/manual/book.pdo.php - 使用 pdo,您可以使用 PDOException 进行异常处理)。

关于您的特定代码,您可以使用以下错误处理:

<?php
function connect(){
    define('DB_USER', 'my_user');
    define('DB_PASSWORD', 'my_pw');
    define('DB_HOST', 'my_host');
    define('DB_NAME', 'my_name');

    global $db_conn;
    $db_conn = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) or die(mysqli_error())

}

function disconnect(){
    mysqli_close($db_conn);

}

addUser($username, $password, $role){
    openConnection();
    global $db_conn;
    //Formulate the query
    $q = "INSERT INTO users VALUES ('$username', '$password' , '$role')";
    //query database
    if (mysqli_query($db_conn, $q) === false)
    {
       throw new Exception(mysqli_error($db_conn));
    }
    closeConnection();

    return true;
}

然后像这样使用它

try {
  if (addUser('name','pw','role'))
  {
     echo "all went well";
  }
} catch (Exception $e)
{
  echo "Mysql error: " . $e->getMessage();
}