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

PHP中MySQL查询确认有值但返回空集问题求助

问题分析与修复方案

代码里的关键问题

  • 硬编码查询未替换:你写死了查询name="Test-01",导致所有行都用这个固定名称的max net,而不是当前循环的$row["name"],这是核心问题之一。
  • 聚合函数列名未处理:SELECT MAX(net)返回的列名是MAX(net),不是net,用fetch_object()->net根本取不到值,必须给列起别名。
  • SQL注入风险:直接把$row["name"]拼进SQL,一旦name包含特殊字符会报错甚至被注入,必须用预处理语句。
  • HTML语法错误:生成单选按钮的echo语句没闭合字符串,最后少了双引号,导致输出失效。

修正后的代码

$sqltankonly = "SELECT * FROM HoldingUnit WHERE tankfacility = 'test' AND net = '0' ORDER BY name";
$resulttankonly = $conn->query($sqltankonly);

if ($resulttankonly->num_rows > 0) {
    echo '<table><tr><th>Destination Tank</th><th>Net</th></tr>';
    while($row = $resulttankonly->fetch_assoc()) {
        echo '<tr><td><input type="radio" name="dtank" value="' . htmlspecialchars($row["name"]) . '" required>' . htmlspecialchars($row["name"]) . '</td>';
        echo '<td>';

        // 修正后的max net查询:用预处理语句+列别名
        $sqlnetcapacity = 'SELECT MAX(net) AS max_net FROM HoldingUnit WHERE name = ?';
        $stmt = $conn->prepare($sqlnetcapacity);
        $stmt->bind_param("s", $row["name"]);
        $stmt->execute();
        $resultnetcapacity = $stmt->get_result();
        $row_net = $resultnetcapacity->fetch_object();
        $netcapacity = $row_net->max_net; // 用别名取值

        // 循环生成单选按钮,修复语法错误
        while($netcapacity > 0) {
            $net_val = htmlspecialchars($netcapacity);
            echo '<input type="radio" name="net" value="' . $net_val . '" />' . $net_val . '<br>';
            $netcapacity--;
        }

        echo '</td></tr>';
    }
    echo '</table>';
}

额外说明

  • 加入htmlspecialchars()是为了防止XSS攻击,避免name或net值里的特殊字符破坏HTML结构。
  • 预处理语句既解决了SQL注入问题,也能避免因name包含引号导致的SQL语法错误。
  • 如果MAX(net)可能为0,你需要根据业务需求调整循环条件(比如改成$netcapacity >= 0)。

内容的提问来源于stack exchange,提问作者Tim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:33:19