PHP连接MySQL数据库的错误处理
<style>.artBox { font: normal 18px/1.5 sans-serif; overflow: auto; position: relative; }
.artBox p { margin: 10px 0; }
.artBox h1, .artBox h2 { margin: 8px 0; }
.artBox code, .artBox pre { background: #f7f4f3; padding: 2px 6px; tab-size: 4; }
.artBox pre { padding: 10px 20px; white-space: pre-wrap; word-wrap: break-word; }
.artBox pre code { padding: 0; background: none; }
.artBox blockquote { margin: 10px 20px; padding: 2px 15px; border-left: 3px solid skyblue; background: #e7e5e3; }
</style>
<div class="artBox">
<p>先看网上各类教程最流行的连接方式:</p>
<pre><code><?php
$servername = 'localhost'; // 数据库服务器名
$username = 'root'; // 数据库用户名
$password = '123456'; // 数据库密码
// 创建连接
$conn = new mysqli($servername, $username, $password);
// 检测连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
echo "成功连接数据库";
?></code></pre>
<p>作为教学,上述代码没毛病,问题是,在实际应用中——包括开发环境和工作环境——这种做法并不靠谱!具体表现为:当 mysqli 所需参数只要任意一个存在错误,创建连接时就会直接报错,检测连接模块根本没有机会运行!</p>
<p>解决方法很多,这里提供一个兼容多数PHP版本的方式进行连接,用的是
<code>try ... catch ...</code> 语句:
</p>
<pre><code><?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 "成功连接数据库";
?></code></pre>
<p>就是说,用
<code>try ... catch ...</code> 取代了前面代码中的连接和检测,其它不变。
</p>
<p>有人可能会说:可以不必要这么麻烦,给 new mysqli 加前导词
<code>@</code> 就可以解决问题。是,
<code>@</code> 可以屏蔽错误,但不是百分百,试看:
</p>
<blockquote>
<p>
<strong>警告</strong> :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。
</p>
</blockquote>
<p>所以说,为万全起见,还是尽可能不使用
<code>@</code> 运算符来抑制错误。
</p>
</div> 又是冷门知识呢,论坛里玩的人很少有人去管数据库连接的事。
不过学习一下也是好的,感谢黑黑好帖{:4_187:} 红影 发表于 2026-4-9 18:06
又是冷门知识呢,论坛里玩的人很少有人去管数据库连接的事。
不过学习一下也是好的,感谢黑黑好帖{:4_187: ...
PHP可以可以选择,但数据库应该是前端绕不开的 虽然不懂,看看也是涨知识。黑黑老师辛苦了!{:4_190:} 梦江南 发表于 2026-4-9 18:52
虽然不懂,看看也是涨知识。黑黑老师辛苦了!
这个不懂没关系的 马黑黑 发表于 2026-4-9 18:20
PHP可以可以选择,但数据库应该是前端绕不开的
对专业人士来说肯定绕不开,对不懂的就悄悄逃了 {:4_173:} 红影 发表于 2026-4-9 22:47
对专业人士来说肯定绕不开,对不懂的就悄悄逃了
实际上也绕不开。比如把,数据库出错了,你就无法正常访问论坛 马黑黑 发表于 2026-4-9 20:43
这个不懂没关系的
黑黑老师,可以不懂吗? 梦江南 发表于 2026-4-11 11:05
黑黑老师,可以不懂吗?
美人能懂世间全部的东东 马黑黑 发表于 2026-4-9 23:11
实际上也绕不开。比如把,数据库出错了,你就无法正常访问论坛
可以请专业人士去处理的啊{:4_173:} 红影 发表于 2026-4-11 19:05
可以请专业人士去处理的啊
他处理之前你是无法访问的 马黑黑 发表于 2026-4-11 21:39
他处理之前你是无法访问的
那是当然,没处理好之前我也不急着玩啊{:4_173:} 红影 发表于 2026-4-12 12:01
那是当然,没处理好之前我也不急着玩啊
急也没用 马黑黑 发表于 2026-4-12 12:59
急也没用
是啊,知道这点,还有什么可急的{:4_173:} 红影 发表于 2026-4-12 14:08
是啊,知道这点,还有什么可急的
但你不能说数据库可以因此绕开 马黑黑 发表于 2026-4-12 23:22
但你不能说数据库可以因此绕开
没绕开啊,是有人帮忙啊{:4_173:} 红影 发表于 2026-4-14 22:55
没绕开啊,是有人帮忙啊
如此甚好 马黑黑 发表于 2026-4-14 22:56
如此甚好
我们又不懂,没人帮怎么行啊{:4_173:} 红影 发表于 2026-4-15 22:02
我们又不懂,没人帮怎么行啊
你说的是交易 马黑黑 发表于 2026-4-15 22:30
你说的是交易
也可以说是友谊。
页:
[1]
2