从MySQL数据表打印数组至物理打印机遇空白页问题求助
解决MySQL数据打印空白页的问题
看起来你的代码里有几个关键问题导致打印空白,我帮你逐一梳理修复:
1. 结果集处理逻辑错误
你直接把mysql_fetch_array(mysql_query(...))赋值给了$fetch,这会仅取出查询结果的第一行数据,而非整个结果集资源。后续的while循环用这个变量的话,根本不会执行(因为已经没有剩余行可以读取了)。
正确的做法是先保存查询结果的资源,再循环读取每一行:
$queryString = "SELECT * FROM items WHERE order_id='".$order_id."' and confirm_order='0'"; $result = mysql_query($queryString); // 先保存完整的结果集资源 $handle = printer_open("POS"); // ... 其他初始化代码 ... while ($row = mysql_fetch_array($result)) { // 从结果集资源中循环取行 // 打印逻辑 }
2. 数组索引未加引号
$row[item_quantity]中,item_quantity没有加单引号,PHP会将其视为未定义常量处理(若未定义该常量,会返回空值或报错)。必须改成字符串索引:
printer_draw_text($handle, $row['item_quantity'], 10, $y);
3. 打印位置重叠导致内容被覆盖
你每次都在坐标(10,10)打印内容,所有行会完全重叠在一起,视觉上就像空白。需要动态调整Y坐标,让每一行都显示在不同位置:
$y = 10; // 初始Y坐标 while ($row = mysql_fetch_array($result)) { printer_draw_text($handle, $row['item_quantity'], 10, $y); $y += 40; // 每次下移40单位,可根据字体大小调整间距 }
4. 提前检查查询是否有数据
在循环前可以先确认查询是否返回了结果,避免无数据时直接打印空白页:
if (mysql_num_rows($result) === 0) { printer_draw_text($handle, "No items found", 10, 10); } else { // 循环打印逻辑 }
额外提醒:废弃的mysql扩展
mysql_*系列函数已经在PHP 5.5之后被废弃,且PHP 7+中已完全移除。建议尽快迁移到mysqli或PDO,避免后续版本兼容性问题。比如mysqli的基础写法:
$conn = mysqli_connect("localhost", "your_username", "your_password", "your_db"); // 注意转义参数防止SQL注入 $queryString = "SELECT * FROM items WHERE order_id='".mysqli_real_escape_string($conn, $order_id)."' and confirm_order='0'"; $result = mysqli_query($conn, $queryString); while ($row = mysqli_fetch_array($result)) { // ... 打印逻辑 ... }
把这些问题修复后,应该就能正常打印出数据了。
内容的提问来源于stack exchange,提问作者Sophie Bernard
相关产品推荐
相关产品推荐

