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
相关产品推荐
相关产品推荐

