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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:48:02