使用PHP PDO查询数据库后无法在页面展示数据的问题解决求助
解决PDO查询无法显示数据的问题
嘿,我一眼就瞅到问题出在哪了——你在while循环里用错了PDO的结果获取方法!咱们来一步步修复:
核心错误:fetchAll() 不该放在while循环里
fetchAll()是一次性把所有查询结果取出来放到一个二维数组里,所以你的while循环其实只会执行一次,而且$row是整个结果集(不是单条记录),这就导致你后面$row[0]、$row[2]这些取值完全不对,自然没法生成正确的输出。
修复步骤
- 替换获取方法:把while里的
fetchAll()换成fetch(PDO::FETCH_NUM),这个方法每次循环取出一条记录,并且以索引数组的形式返回,完美匹配你原来用$row[0]、$row[1]的逻辑。 - 开启PDO错误提示:建议在初始化PDO连接时开启错误模式,这样如果有连接或查询错误,能直接看到报错,方便调试(比如在
core.php里加上错误配置)。 - 清理无用代码:你注释掉的
$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
相关产品推荐
相关产品推荐

