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

MongoDB查询无匹配时If语句不执行,重定向失效问题求助

问题分析与解决

两个核心问题

  • 跳转格式错误:控制台报错是因为header("refresh:3; Location: searchbyname.php")的写法不符合HTTP refresh头规范,浏览器错误地把Location:当成了协议(scheme),导致无法识别跳转目标。
  • 结果判断逻辑错误:$query->isDead()不能用来判断查询是否有匹配结果,这个方法的作用是判断游标是否已经关闭/无法继续读取,而非结果是否为空,所以无匹配时条件不成立,if语句无法执行。

修正步骤

1. 修复跳转头格式

把refresh头改成标准写法,用url=代替Location::

header("refresh:3; url=searchbyname.php"); // 正确的跳转格式

2. 修正结果判断逻辑

将游标转换为数组,通过判断数组是否为空确认是否有匹配结果:

$filter = ['employee_name' => $searchname ];
$option = [];
$read = new MongoDB\Driver\Query($filter, $option);
$query = $conn->executeQuery("$dbname.$collection", $read);

// 将游标转为数组,便于判断是否有结果
$results = iterator_to_array($query);

if (empty($results)) {
    $error = "No Voip Contact with the name provided. Try a different name.";
    header("refresh:3; url=searchbyname.php");
    exit;
} else {
    foreach ($results as $queryresult):
?>
    <div class="table-container">
        <table>
            <!-- 表格内容 -->
        </table>
    </div>
<?php
    endforeach;
}

补充说明

  • iterator_to_array($query)会把游标中的所有结果读取到数组中,适合数据量不大的搜索场景;如果数据量极大,可通过游标循环计数的方式判断结果是否存在,但搜索场景下数组转换的方式足够高效。
  • 调用header()之前必须确保没有任何输出(包括空格、HTML标签),否则header会失效。

内容的提问来源于stack exchange,提问作者Wambugu K. Martin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 21:12:51