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

PHP查询返回NULL但数据实际存在,mysqli_fetch_array错误排查

问题根因

你现在返回NULL的核心原因是SQL语句中对$prud的拼接额外加了前后空格,导致查询条件匹配失败:

$priceSql = "SELECT saleprice from products where id = ' $prud ' ";
// 这里$prud前后多了空格,比如传入id是123,实际查询的是 id = ' 123 '

你的id字段是int类型,数据库执行查询时会把带空格的字符串转为数字,部分场景下转换后的数值和实际id不匹配,就会查不到数据,mysqli_query返回空结果集,mysqli_fetch_array读取空结果集就会返回NULL,最终push到数组里就是NULL值。

其他潜在问题

  • 没有做SQL错误校验:如果SQL执行出错(比如数据库连接断开、表不存在),mysqli_query会返回布尔值false,传入mysqli_fetch_array也会返回NULL,你没有对查询结果做合法性判断
  • 存在严重SQL注入风险:直接拼接用户传入的$_POST参数到SQL语句中,极易被注入攻击,必须使用预处理语句传参
  • 多余的引号包裹:id是数值类型,查询条件不需要用单引号包裹

修复后的代码示例

$selected_items_values = $_POST['product_id'];
$prices = [];
// 先创建预处理语句,避免注入,同时性能更好
$stmt = mysqli_prepare($db, "SELECT saleprice FROM products WHERE id = ?");
// 绑定参数,i代表传入的是int类型
mysqli_stmt_bind_param($stmt, "i", $prud);

foreach($selected_items_values as $prud) {
    if(isset($prud) && is_numeric($prud)) {
        // 执行查询
        mysqli_stmt_execute($stmt);
        // 绑定结果变量
        mysqli_stmt_bind_result($stmt, $saleprice);
        // 读取结果
        if(mysqli_stmt_fetch($stmt)) {
            array_push($prices, $saleprice);
        }
    }
}
var_dump($prices);

验证方法

如果修改后还是有问题,可以先打印实际执行的SQL语句确认参数是否正确:

// 原来的代码里加一行打印SQL,看拼接出来的语句是不是正确的
echo $priceSql;

直接把打印出来的SQL放到数据库客户端执行,就能确认是不是查询条件的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:27:04