PHP mysqli最佳实践错误处理

时间:2015-01-08 10:15:58

标签: php mysql mysqli

我是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产生的警告。

1 个答案:

答案 0 :(得分:1)

使用@运算符,您将抑制查询错误(请参阅http://php.net/manual/de/language.operators.errorcontrol.php)。正如评论中所提到的,你应该真正检查一种面向对象的数据库操作方式(你可能想看看http://php.net/manual/de/class.mysqli.phphttp://php.net/manual/book.pdo.php -with 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();
}