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

PHP展示MySQL查询结果首字母问题:无法显示企业名称首字母

问题解决:企业首字母导航与列表展示

首先修正你的SQL查询语句

你原查询存在三个核心错误:

  1. 字段名bname被单引号包裹,MySQL会把它当成字符串常量而非表字段,导致LEFT('bname',1)永远返回字符b
  2. 表名bisEntry用单引号包裹,MySQL会将其识别为字符串而非表名,属于语法错误
  3. 查询的结果列没有别名,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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:22:41