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

从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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:14:13