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
相关产品推荐
相关产品推荐

