You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下PHP正确连接MySQL数据库读取数据及报错解决方案

报错原因解析

报错核心是$conn->query($sql)执行失败返回了布尔值false,你直接对布尔值调用fetch_array()方法就会触发该错误。常见触发原因如下:

  • test数据库中不存在名为user的表
  • 配置的my_user账号没有test库user表的查询权限
  • 表名user是MySQL内置关键字,未加反引号包裹导致SQL语法错误
  • 数据库连接会话后续异常(概率较低)
正确的PHP连接MySQL实现方案

修正后的完整代码(带完整错误校验)

<html>
<head>
    <title>Test PHP Connection Script</title>
</head>
<body>
    <h3>PHP Connect Test</h3>
<?php
    $dbname = 'test';
    $dbuser = 'my_user';
    $dbpass = 'my_password';
    $dbhost = 'localhost';

    // 开启MySQLi异常上报方便排查问题
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    try {
        $conn = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
        $conn->set_charset("utf8mb4"); // 统一设置字符集避免中文乱码

        // 关键字作为表名需用反引号包裹
        $sql = "SELECT * FROM `user`";
        $result = $conn->query($sql);

        // 先校验查询结果合法性,再判断是否有返回数据
        if ($result && $result->num_rows > 0) {
            // 循环输出所有匹配数据,避免单条数据为空的问题
            while($row = $result->fetch_assoc()) {
                printf("%s %s (%s)<br>", $row["firstname"], $row["lastname"], $row["age"]);
            }
        } else {
            echo "未查询到匹配数据";
        }

        // 释放结果集、关闭连接释放资源
        $result->free();
        $conn->close();
    } catch (mysqli_sql_exception $e) {
        // 调试阶段直接输出错误,生产环境请改为写入日志
        echo "数据库操作错误:" . $e->getMessage();
        exit();
    }
?>
</body>
</html>

Linux环境额外检查项

  • 确认MySQL服务正常运行:执行命令systemctl status mysql(部分发行版服务名为mysqld/mariadb),未启动则执行systemctl start mysql,如需开机自启追加enable参数即可
  • 验证库表及账号权限:
    1. 命令行执行mysql -u root -p登录数据库
    2. 执行show databases;确认test库存在
    3. 执行use test;切换到test库,执行show tables;确认user表存在,执行desc user;确认表中存在firstname、lastname、age三个字段
    4. 执行show grants for 'my_user'@'localhost';确认账号权限,无查询权限则执行GRANT SELECT ON test.* TO 'my_user'@'localhost'; FLUSH PRIVILEGES;完成授权
  • 确认PHP mysqli扩展已启用:执行php -m | grep mysqli,无输出则安装对应扩展,Debian/Ubuntu系执行apt install php-mysqli,CentOS/RHEL系执行yum install php-mysqli,安装完成后执行systemctl restart apache2(部分发行版服务名为httpd)重启Apache生效

内容的提问来源于stack exchange,提问作者Sergio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 22:48:00