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

mysql_fetch_array+while循环仅打印第一条结果,求解决方案(禁用mysqli/PDO)

解决mysql_fetch_array循环仅打印第一条数据的问题

看起来你遇到的核心问题不是mysql_fetch_array没遍历到所有数据,而是所有行的打印位置完全重叠了——后面的内容直接覆盖了前面的,肉眼就只能看到第一条。咱们一步步来排查修复:

1. 先解决打印位置重叠的问题

你在printer_draw_text里把y坐标固定成了10,每一行数据都画在同一个位置,自然会被覆盖。需要每次循环时递增y坐标,让内容逐行往下排:

// 初始化y轴起始位置
$yPos = 10;
while ($fetch = mysql_fetch_array($myquery)) {
    // 注意:数组索引要加单引号,避免PHP解析成未定义常量
    $product = $fetch['product_name'];
    $type = $fetch['type'];
    $q = $fetch['item_quantity'];
    $comment = $fetch['comment'];
    $tex = "{$q} {$type} {$comment} {$product}";
    
    printer_draw_text($handle, $tex, 10, $yPos);
    // 每次循环后增加y坐标(数值根据你的字体大小调整,比如这里加40)
    $yPos += 40;
}

2. 确认查询真的返回了多条数据

可以先在循环前打印查询结果的行数,验证MySQL是否确实返回了符合条件的多条数据:

$myquery = mysql_query($queryString);
// 测试用,上线后可删除
echo "查询返回行数:" . mysql_num_rows($myquery);

如果行数显示为1,说明你的查询条件可能有问题——比如order_id的值不对,或者confirm_order='0'的过滤不符合预期。可以直接打印出生成的SQL语句,复制到MySQL客户端执行看看实际结果:

echo "执行的SQL语句:" . $queryString;

3. 加上SQL错误检查(旧扩展必备)

旧的mysql扩展不会自动抛出错误,建议加上错误检查,避免因为SQL语法错误导致无结果返回:

$myquery = mysql_query($queryString);
if (!$myquery) {
    die('MySQL查询错误: ' . mysql_error());
}

这样如果SQL有语法问题,会直接输出错误信息,方便快速排查。

总结

最可能的原因就是打印位置重叠,调整y坐标的递增逻辑就能解决。同时记得规范数组索引的写法,加上错误检查和结果行数验证,确保整个流程没有隐藏问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:24:23