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();
}
我是 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();
}