PHP展示MySQL查询结果首字母问题:无法显示企业名称首字母
问题解决:企业首字母导航与列表展示
首先修正你的SQL查询语句
你原查询存在三个核心错误:
- 字段名
bname被单引号包裹,MySQL会把它当成字符串常量而非表字段,导致LEFT('bname',1)永远返回字符b - 表名
bisEntry用单引号包裹,MySQL会将其识别为字符串而非表名,属于语法错误 - 查询的结果列没有别名,PHP中无法通过友好的键名获取值
修正后的SQL:
// 给首字母列起别名initial,同时按字母排序 $sql = "SELECT DISTINCT LEFT(bname, 1) AS initial FROM bisEntry ORDER BY initial"; $result4 = mysqli_query($conn, $sql); // 建议增加SQL错误检查,方便排查问题 if (!$result4) { die(mysqli_error($conn)); }
修正首字母导航栏的PHP代码
原代码中$row['bname']不存在,因为查询结果的键是你定义的别名initial,直接取值即可:
// 生成字母导航链接,点击后传递首字母参数 echo "<div class='letter-nav'>"; while ($row = mysqli_fetch_array($result4, MYSQLI_ASSOC)) { $initial = $row['initial']; // 生成带参数的链接,点击后显示对应字母的企业 echo "| <a href='?letter=" . urlencode($initial) . "'>{$initial}</a> "; } echo "</div>";
解决foreach报错的问题
你第二段代码里的$row['category']完全没有依据——你的查询里根本没有category字段,而且mysqli_fetch_array返回的是单行数据,不是多维数组,所以foreach遍历一个不存在的null值才会抛出foreach() argument must be of type array|object错误,这段代码完全不需要,直接用上面的循环即可。
补充:点击字母后展示对应企业列表
为了实现完整功能,添加获取URL参数、查询对应企业的逻辑:
// 获取当前要展示的首字母,默认空 $currentLetter = isset($_GET['letter']) ? trim($_GET['letter']) : ''; if (!empty($currentLetter)) { // 用预处理语句防止SQL注入 $stmt = mysqli_prepare($conn, "SELECT bname FROM bisEntry WHERE LEFT(bname, 1) = ? ORDER BY bname"); mysqli_stmt_bind_param($stmt, "s", $currentLetter); mysqli_stmt_execute($stmt); $companyResult = mysqli_stmt_get_result($stmt); echo "<h3>以{$currentLetter}开头的企业</h3>"; echo "<ul>"; while ($company = mysqli_fetch_assoc($companyResult)) { echo "<li>{$company['bname']}</li>"; } echo "</ul>"; }
内容的提问来源于stack exchange,提问作者Phlume
相关产品推荐
相关产品推荐

