PHP MySQL下拉筛选查询异常:同结构代码第二个分支无结果
问题分析与修复
我一眼就发现第二个筛选分支里有两个致命错误,这就是它无法获取数据的核心原因:
错误1:混用废弃的mysql扩展与mysqli扩展
你在第二个分支里写了一行完全多余且错误的代码:
while($data = mysql_fetch_assoc($result)) $data = "";
mysql_fetch_assoc()属于已经被废弃的老版MySQL扩展,和你正在使用的mysqli扩展完全不兼容,这行代码不仅毫无意义,还会直接导致结果集读取异常。
错误2:提前耗尽了查询结果集
就算上面的函数名是对的,这行while循环也会把$result里的所有数据都读取一遍,把结果集的指针移到末尾,导致后面真正用来渲染数据的while($rows = mysqli_fetch_assoc($result))再也读不到任何数据。
修复后的第二个分支代码
把那行错误的代码删掉,然后确保所有数据库操作都用mysqli系列函数,修复后的代码如下:
else if($_POST["FilterDoc"]=="other") { $result = mysqli_query($conn,"SELECT * FROM records ORDER BY other_govt ASC"); // 删掉那行错误的while循环 $data = ""; // 初始化$data变量 while($rows = mysqli_fetch_assoc($result)){ $document_type = $rows['document_type']; $date_received = $rows['date_received']; $application_no = $rows['application_no']; $hei = $rows['hei']; $school_name = $rows['school_name']; $from_co = $rows['from_co']; $other_govt = $rows['other_govt']; $contact_person = $rows['contact_person']; $comment = $rows['comment']; $program = $rows['program']; $year_level = $rows['year_level']; $academic_year = $rows['academic_year']; $transaction_no = $rows['transaction_no']; $output = "<table><tr><td>$other_govt</td><td>$document_type</td><td>$date_received</td><td>$application_no </td><td>$hei</td><td>$school_name</td><td>$from_co</td><td>$contact_person</td><td>$comment</td><td>$program</td><td>$year_level</td><td>$academic_year</td><td>$transaction_no</td></tr></table><br>"; $data .= '<a href = "editdoc.php?v='.$transaction_no.'" name="documents">'.$output.'</a>'; } echo $data; }
额外调试建议
为了避免类似问题,建议你在mysqli_query之后添加错误检查,这样能快速定位SQL或连接问题:
$result = mysqli_query($conn,"SELECT * FROM records ORDER BY other_govt ASC"); if (!$result) { die("查询失败: " . mysqli_error($conn)); }
这样如果SQL语句有问题(比如列名拼写错误),你能直接看到错误信息,而不是一片空白。
内容的提问来源于stack exchange,提问作者Abraham
相关产品推荐
相关产品推荐

