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

使用PHP PDO查询数据库后无法在页面展示数据的问题解决求助

解决PDO查询无法显示数据的问题

嘿,我一眼就瞅到问题出在哪了——你在while循环里用错了PDO的结果获取方法!咱们来一步步修复:

核心错误:fetchAll() 不该放在while循环里

fetchAll()是一次性把所有查询结果取出来放到一个二维数组里,所以你的while循环其实只会执行一次,而且$row是整个结果集(不是单条记录),这就导致你后面$row[0]、$row[2]这些取值完全不对,自然没法生成正确的输出。

修复步骤

  1. 替换获取方法:把while里的fetchAll()换成fetch(PDO::FETCH_NUM),这个方法每次循环取出一条记录,并且以索引数组的形式返回,完美匹配你原来用$row[0]、$row[1]的逻辑。
  2. 开启PDO错误提示:建议在初始化PDO连接时开启错误模式,这样如果有连接或查询错误,能直接看到报错,方便调试(比如在core.php里加上错误配置)。
  3. 清理无用代码:你注释掉的$row = $result->fetch_array();是mysqli的方法,PDO里没有这个,直接删掉就行。

修改后的完整PHP代码

<?php 
include ("core.php");
// 建议在core.php的PDO初始化中添加错误模式:
// $connect = new PDO($dsn, $username, $password, [
//     PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
// ]);

$output = array('data' => array());
$sql = "SELECT categories_id, categories_name, categories_active, categories_status FROM categories WHERE categories_status = ?";
$result = $connect->prepare($sql);
// 执行时捕获异常,方便调试
try {
    $result->execute([1]);
} catch(PDOException $e) {
    die("查询失败: " . $e->getMessage());
}

if($result->rowCount() > 0) {
    $activeCategories = "";
    // 这里把fetchAll()换成fetch(PDO::FETCH_NUM)
    while($row = $result->fetch(PDO::FETCH_NUM)) {
        $categoriesId = $row[0];
        // active判断逻辑保留
        if($row[2] == 1) {
            $activeCategories = "<label class='label label-success'>Available</label>";
        } else {
            $activeCategories = "<label class='label label-danger'>Not Available</label>";
        }
        $button = '<!-- Single button -->
        <div class="btn-group">
          <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
            Action <span class="caret"></span>
          </button>
          <ul class="dropdown-menu">
            <li><a type="button" data-toggle="modal" id="editCategoriesModalBtn" data-target="#editCategoriesModal" onclick="editCategories('.$categoriesId.')">
              <i class="glyphicon glyphicon-edit"></i> Edit</a></li>
            <li><a type="button" data-toggle="modal" data-target="#removeCategoriesModal" id="removeCategoriesModalBtn" onclick="removeCategories('.$categoriesId.')">
              <i class="glyphicon glyphicon-remove-sign"></i> Remove</a></li>
            <li><a type="button" data-toggle="modal" data-target="#deleteCategoriesModal" id="deleteCategoriesModalBtn" onclick="deleteCategories('.$categoriesId.')">
              <i class="glyphicon glyphicon-trash"></i> Delete</a></li>
          </ul>
        </div>';
        $output['data'][] = array(
            $row[1],
            $activeCategories,
            $button
        );
    } 
}
$connect = null;
echo json_encode($output);
?>

额外调试&前端渲染提示

  • 可以在execute()之后,先打印var_dump($result->fetchAll());看看有没有拿到数据,确认查询是否有效。
  • 前端需要用JS接收JSON并渲染到表格,比如用jQuery的ajax:
$.ajax({
    url: '你的PHP文件路径',
    type: 'GET',
    dataType: 'json',
    success: function(data) {
        // 遍历data.data,把每一行添加到表格tbody里
        $.each(data.data, function(index, row) {
            $('table tbody').append(`<tr><td>${row[0]}</td><td>${row[1]}</td><td>${row[2]}</td></tr>`);
        });
    }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 17:59:08