PHP查询MySQL无匹配行时未输出'-'显示空白问题排查求助
问题根因
- 逻辑位置错误:你将无结果的判断逻辑写在了
while ($row=$result->fetch_assoc())循环内部。当查询无匹配行时,fetch_assoc()会直接返回false,循环体完全不会执行,内部的判断代码自然不会运行,导致对应位置空白。 - 判断条件错误:
mysqli_num_rows()返回结果集的行数,最小取值为0,你写的mysqli_num_rows($result) < 0条件永远不会成立,即便逻辑位置正确也无法触发输出'-'的逻辑。
修复后代码示例
<tr> <td id="idtypesectype2">Skype</td> <td id="doubledotsec">:</td> <td> <?php $search = $_GET['search']; $sql ="SELECT * FROM contact_info WHERE CU_id='$search' AND contact_information_type='social_media_skype' AND visibility='1'"; $result = $db->query($sql); // 先判断是否有匹配行,再决定输出逻辑 if ($result->num_rows > 0) { while ($row=$result->fetch_assoc()) { echo $row['contact_information']."<br>"; } } else { echo "-"; } ?> </td> </tr>
安全优化提示
原代码直接将用户可控的$_GET['search']拼接进SQL语句,存在严重的SQL注入风险,推荐使用参数化预处理语句执行查询,示例如下:
<?php $search = $_GET['search']; // 预处理语句避免SQL注入 $stmt = $db->prepare("SELECT contact_information FROM contact_info WHERE CU_id=? AND contact_information_type='social_media_skype' AND visibility='1'"); $stmt->bind_param("s", $search); // 绑定参数,s表示参数为字符串类型 $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows > 0) { while ($row=$result->fetch_assoc()) { echo $row['contact_information']."<br>"; } } else { echo "-"; } ?>
内容的提问来源于stack exchange,提问作者kalokairines
相关产品推荐
相关产品推荐

