请马上登录,朋友们都在花潮里等着你哦:)
您需要 登录 才可以下载或查看,没有账号?立即注册
x
先看网上各类教程最流行的连接方式:
<?php
$servername = 'localhost'; // 数据库服务器名
$username = 'root'; // 数据库用户名
$password = '123456'; // 数据库密码
// 创建连接
$conn = new mysqli($servername, $username, $password);
// 检测连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
echo "成功连接数据库";
?>
作为教学,上述代码没毛病,问题是,在实际应用中——包括开发环境和工作环境——这种做法并不靠谱!具体表现为:当 mysqli 所需参数只要任意一个存在错误,创建连接时就会直接报错,检测连接模块根本没有机会运行!
解决方法很多,这里提供一个兼容多数PHP版本的方式进行连接,用的是
try ... catch ... 语句:
<?php
$servername = 'localhost'; // 数据库服务器名
$username = 'root'; // 数据库用户名
$password = '123456'; // 数据库密码
try {
$conn = new mysqli($servername, $username, $password);
// 检测连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
} catch (mysqli_sql_exception $e) {
die("连接失败: " . $e->getMessage());
}
echo "成功连接数据库";
?>
就是说,用
try ... catch ... 取代了前面代码中的连接和检测,其它不变。
有人可能会说:可以不必要这么麻烦,给 new mysqli 加前导词
@ 就可以解决问题。是,
@ 可以屏蔽错误,但不是百分百,试看:
警告 :PHP 8.0.0 之前,如果错误被 @ 运算符抑制,则在自定义错误处理程序中调用 error_reporting() 将始终返回 0。PHP 8.0.0 起,返回(按位)表达式的值:E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR | E_RECOVERABLE_ERROR | E_PARSE。
所以说,为万全起见,还是尽可能不使用
@ 运算符来抑制错误。
|