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

使用fetch_all(MYSQLI_ASSOC)时echo无输出,求排查数据库查询失败原因

让我帮你梳理下代码里的几个明显问题,以及fetch_all(MYSQLI_ASSOC)无输出的可能原因:

问题分析与修复方案

1. 数据库连接参数完全缺失(最致命的问题)

你调用mysqli_connect("","","", "")时,四个必填参数(数据库主机地址、数据库用户名、数据库密码、目标数据库名)全是空字符串,这根本无法建立与数据库的有效连接!没有连接的话,后续的SQL查询自然无法执行,更别说获取数据了。

2. 缺少关键的错误处理逻辑

不管是数据库连接阶段,还是SQL查询阶段,你都没有添加错误检查的代码,出问题时完全无法定位原因:

  • 连接后要检查是否连接失败
  • 查询后要检查返回的$result是否为false(查询失败的标志)

3. SQL语句的不规范写法(虽不致命但有优化空间)

虽然你已经把$rest_id强转成了整数,但拼接SQL时还是给它加了单引号'".$rest_id."'——整数类型的数据库字段不需要单引号包裹。另外,更推荐用预处理语句,这是避免SQL注入、提升代码安全性的标准写法。

4. fetch_all无输出的核心原因

如果前面的数据库连接失败,或者SQL查询执行失败,$result会变成false,这时候调用fetch_all(MYSQLI_ASSOC)会直接触发报错,导致后续的echo语句根本无法执行;另外,如果查询结果为空(没有匹配的menu_item数据),fetch_all会返回空数组,若没有处理空数组的逻辑,也会看起来没有输出。


修正后的代码示例
<!DOCTYPE html>
<html>
<body>
<?php
// 开启错误提示,方便调试(生产环境建议关闭)
error_reporting(E_ALL);
ini_set('display_errors', 1);

// 更稳妥的参数获取方式:假设URL格式是?restaurant_id=xxx
$rest_id = isset($_GET['restaurant_id']) ? (int)$_GET['restaurant_id'] : 0;
var_dump($rest_id);

// 填写你的真实数据库连接参数
$db_host = 'localhost'; // 通常是localhost,根据你的服务器配置调整
$db_user = '你的数据库用户名';
$db_pwd = '你的数据库密码';
$db_name = '你的数据库名称';

// 建立连接并检查错误
$con = mysqli_connect($db_host, $db_user, $db_pwd, $db_name);
if (!$con) {
    die("数据库连接失败: " . mysqli_connect_error());
}

// 使用预处理语句执行查询(更安全)
$sql = "SELECT * from menu_item WHERE restaurant_id = ?";
$stmt = $con->prepare($sql);
$stmt->bind_param("i", $rest_id); // "i"表示参数为整数类型
$stmt->execute();
$result = $stmt->get_result();

// 处理查询结果
if ($result && $result->num_rows > 0) {
    $menu_items = $result->fetch_all(MYSQLI_ASSOC);
    // 遍历输出数据,替换成你实际的字段名
    foreach ($menu_items as $item) {
        echo "<p>菜品ID: {$item['id']},菜品名称: {$item['item_name']}</p>";
    }
} else {
    echo "<p>没有找到匹配的菜品数据</p>";
}

// 清理资源
$stmt->close();
mysqli_close($con);
?>
</body>
</html>

额外调试建议
  • 先确认$rest_id的值是否正确:通过var_dump($rest_id)输出的结果,判断是否获取到了预期的餐厅ID。
  • 直接在数据库客户端(比如phpMyAdmin)执行对应的SQL语句,验证是否有返回结果,排除数据本身的问题。

内容的提问来源于stack exchange,提问作者Kiki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:46:05