如何修复PDO操作SQLite表仅显示首个属数据问题并生成属种无序列表?
解决方法
你的问题出在fetchColumn()方法上——它只返回结果集第一列的第一条数据,所以只能看到第一个genus值。要获取所有数据并生成指定格式的无序列表,你需要修改数据获取和输出的逻辑:
修改后的代码
<?php try { $conn = new PDO('sqlite:db/MyDatabase.db'); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $conn->prepare("SELECT genus, species FROM MyTable ORDER BY genus ASC, species ASC"); $stmt->execute(); // 获取所有结果,以关联数组形式返回 $allData = $stmt->fetchAll(PDO::FETCH_ASSOC); echo '<ul>'; // 遍历每一行数据 foreach ($allData as $row) { // 拼接genus和species为指定格式 $listItem = $row['genus'] . ' ' . $row['species']; echo '<li>' . $listItem . '</li>'; } echo '</ul>'; } catch(PDOException $e) { echo "Error: " . $e->getMessage(); } $conn = null; ?>
关键修改点说明
fetchAll(PDO::FETCH_ASSOC):替代fetchColumn(),一次性获取查询返回的所有行,每一行是一个关联数组,键对应数据库的列名(genus和species)。- 循环遍历结果:用
foreach遍历每一行数据,拼接genus和species为你需要的格式,逐个生成列表项。 - 优化输出结构:把
<ul>放在循环外,避免重复生成列表容器,每个<li>对应一条数据。
如果查询结果为空,你可以添加判断逻辑优化提示:
echo '<ul>'; if (empty($allData)) { echo '<li>No data found</li>'; } else { foreach ($allData as $row) { $listItem = $row['genus'] . ' ' . $row['species']; echo '<li>' . $listItem . '</li>'; } } echo '</ul>';
内容的提问来源于stack exchange,提问作者Szabolcs Horvath
相关产品推荐
相关产品推荐

