花潮论坛

搜索
热搜: 活动 交友 discuz
查看: 7|回复: 0

PHP连接MySQL数据库的错误处理

[复制链接]
  • TA的每日心情
    奋斗
    2026-4-9 12:41
  • 签到天数: 1784 天

    [LV.Master]伴坛终老

    3180

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

    发表于 2026-4-9 12:44 | 显示全部楼层 |阅读模式

    请马上登录,朋友们都在花潮里等着你哦:)

    您需要 登录 才可以下载或查看,没有账号?立即注册

    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。

    所以说,为万全起见,还是尽可能不使用 @ 运算符来抑制错误。

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|手机版|Archiver|服务支持:DZ动力|huachaowang.com Inc. ( 蜀ICP备17032287号-1 )

    GMT+8, 2026-4-9 14:31 , Processed in 0.054241 second(s), 24 queries .

    Powered by Discuz! X3.4

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表