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

PHP导出数据库数据到CSV时出现num_rows读取布尔值错误

问题原因与解决方法

核心错误原因

你的SQL语句存在语法错误,导致mysqli_query执行失败,返回了布尔值false而非预期的结果集对象,因此调用$query->num_rows时触发了“Attempt to read property 'num_rows' on bool”错误。

具体错误点:SELECT字段列表最后一个字段stock.final_price as cost后面多了一个冗余逗号,这直接导致SQL解析失败。

修正后的代码

1. 修复SQL语句

$stmt = "SELECT FROM_UNIXTIME(`stock`.`created_at`, '%Y-%m-%d') as date, stock.pid, stock.name, stock.description, stock.price, stock.final_price as cost FROM `stock` WHERE stock.type = 'partbike' AND stock.store = 'TWN'";

2. 增加查询错误校验

为了快速定位后续可能出现的问题,建议在执行查询后先判断是否执行成功:

$query = mysqli_query($db, $stmt);

// 先校验查询是否成功
if (!$query) {
    die('SQL执行错误: ' . mysqli_error($db));
}

if ($query->num_rows > 0) {
    $delimiter = ",";
    $filename = "stock" . date('Y-m-d') . ".csv";
    
    // 创建文件指针
    $f = fopen('php://memory', 'w');
    
    // 设置CSV列头
    $fields = array('Date','Part.ID','Make','Model','Price','Cost');
    fputcsv($f, $fields, $delimiter);
    
    // 逐行写入数据
    while($row = $query->fetch_assoc()){
        $lineData = array($row['date'], $row['pid'], $row['name'], $row['description'], $row['price'], $row['cost']);
        fputcsv($f, $lineData, $delimiter);
    }

    // 补充:将内存中的CSV文件输出到浏览器供下载
    fseek($f, 0);
    header('Content-Type: text/csv');
    header('Content-Disposition: attachment; filename="' . $filename . '";');
    fpassthru($f);
    exit;
} else {
    echo "没有符合条件的数据";
}

额外提示

  • 编写SQL时要注意字段列表的格式,最后一个字段后不要加逗号,这是高频出现的语法错误。
  • 养成添加错误处理的习惯,通过mysqli_error($db)可以快速获取SQL执行失败的具体原因,大幅提升调试效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 01:41:32