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

