使用PHP+while循环打印MySQL查询结果表时重复输出整表如何解决
问题根源说明
- 关于
fetch(PDO::FETCH_ASSOC):该方法每次调用会从结果集中取1行数据,存在数据时返回关联数组,结果集读完后返回false,你之前的理解有误。而且你在if判断前先调用了一次fetch,直接把第一条数据吃掉了,后续while循环会漏掉第一条记录。 - 重复输出表格的原因:你把
<table>标签和表头代码写在了while循环内部,每遍历一行数据就会输出一次完整的表格结构,自然出现多个表格。 - 额外隐藏问题:你的SQL查询语句没有查询
user_id字段,后续拼接编辑/删除链接时调用$row['user_id']会报错;另外删除链接的代码写错了,href="delete".php的点放在了引号外面,会导致HTML语法错误。
修正后代码
// 先判断登录状态 if (isset($_SESSION['success'])) { // 查询时加上user_id字段,后面编辑删除要用 $stmt = $pdo->query("SELECT user_id, make, model, year, mileage from autos"); // 一次性取出所有行存到数组里,方便判断有没有数据 $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); if (count($rows) > 0) { // 表格和表头只输出一次,放在循环外面 echo '<table border="1">'."\n"; echo "<tr><td>Make</td><td>Model</td><td>Year</td><td>Mileage</td><td>Action</td></tr>"; // 遍历行输出内容 foreach ($rows as $row) { echo "<tr><td>"; echo htmlentities($row['make']); echo "</td><td>"; echo htmlentities($row['model']); echo "</td><td>"; echo htmlentities($row['year']); echo "</td><td>"; echo htmlentities($row['mileage']); echo "</td><td>"; // 修正delete.php的引号错误 echo '<a href="edit.php?user_id='.$row['user_id'].'">Edit</a> / <a href="delete.php?user_id='.$row['user_id'].'">Delete</a>'; echo "</td></tr>"; } echo "</table>"; } else { echo "No rows found"; } }
内容的提问来源于stack exchange,提问作者Elizabeth
相关产品推荐
相关产品推荐

