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

PHP无法显示值:已知产品名称获取ID时$idprod为NULL问题排查

问题分析与解决方案

你遇到的问题根源非常明确——你没有把数据库查询的结果集赋值给$result变量!

先看你代码里的关键片段:

$sql = "SELECT id FROM products where name='$prod'";
if ($conn->query($sql) === FALSE) {
    echo "Error: " . $sql . "<br>" . $conn->error;
}
$row=$result->fetch_assoc();

这里$conn->query($sql)确实执行了SQL查询,但你没有把返回的结果集对象保存到$result中。后续调用$result->fetch_assoc()时,$result要么是未定义的,要么是之前遗留的NULL值,自然$row['id']也会是NULL。

另外还有个逻辑顺序问题:你应该先判断结果集的行数,再去获取行数据,不然如果结果集为空,$row会返回FALSE,访问$row['id']会直接抛出错误。

修正后的代码

$sql = "SELECT id FROM products where name='$prod'";
$result = $conn->query($sql); // 核心修正:把查询结果赋值给$result变量
if ($result === FALSE) {
    echo "Error: " . $sql . "<br>" . $conn->error;
} else {
    if($result->num_rows == 0) {
        echo "nah";
    } else {
        $row = $result->fetch_assoc();
        $idprod = $row['id'];
        echo $idprod;
    }
}

重要安全提醒

你的代码存在严重的SQL注入风险!直接将$prod(假设它来自用户输入)拼接到SQL语句中,攻击者可以构造恶意输入篡改你的SQL逻辑,甚至窃取、删除数据库数据。

推荐使用MySQLi预处理语句来规避风险,示例代码如下:

$stmt = $conn->prepare("SELECT id FROM products where name=?");
$stmt->bind_param("s", $prod); // "s"表示参数为字符串类型
$stmt->execute();
$result = $stmt->get_result();
if($result->num_rows == 0) {
    echo "nah";
} else {
    $row = $result->fetch_assoc();
    $idprod = $row['id'];
    echo $idprod;
}
$stmt->close();

内容的提问来源于stack exchange,提问作者the Graveyard Girl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:56:19