PHP mysqli最佳实践错误处理

PHP mysqli最佳实践错误处理,php,mysql,mysqli,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 = mysq

我是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();
}
如果DB连接失败,应该有类似的处理方法。有人能帮我找到PHP中与数据库相关的错误处理的最佳实践吗


编辑:在阅读注释之后,我已经从代码中删除了所有的“@”字符,因为它们抑制了PHP产生的警告

使用@operator,可以抑制查询错误(请参阅)。正如在评论中提到的,您应该真正检查一种面向对象的数据库操作方式(您可能希望了解或-使用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;
}

每次在一行代码前添加@符号时,都会强制php不要给出关于该行代码的错误
@mysqli_connect
@
肯定不是最好的做法谢谢提示!因此,如果我正确理解此代码;如果mysqli_query($db_conn,$q)返回false(=数据库出现问题),我们将向“客户端”抛出一个异常,该异常显示错误消息?另外,处理“mysqli_connect(…)”产生的错误如何?mysqli_connect也会在错误时返回false,因此您可以在此处执行类似操作:If(!@mysqli_connect()){抛出新异常('Error while connecting:'.mysqli_Error());}它看起来像是'或者死了(mysqli_Error()'打印得很好:),谢谢您的输入
<?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();
}