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

使用tc-lib-barcode生成二维码仅输出数据库最后一条记录求助

问题根因

代码核心问题为文件名重复导致的文件覆盖:

  • time()函数返回精度为秒的时间戳,while循环执行3次的总耗时远小于1秒,三次生成的文件名完全相同
  • 后续生成的二维码文件直接覆盖前序同名文件,最终目录内仅保留最后一条记录对应的二维码,前端输出的3张图片实际指向同一文件,因此扫描结果均为最后一条链接。

修复方案

修改文件名生成逻辑,保证每个二维码文件名唯一即可,可任选以下两种方案:

方案1:拼接自增序号

在循环外定义自增变量,拼接到文件名中:

// 在while循环前新增自增变量定义
$file_index = 0;
while($row = $result->fetch_assoc()) {
    // 原有其他逻辑保持不变
    $timestamp = time();
    // 拼接序号生成唯一文件名
    $file_name = $timestamp . '_' . $file_index . '.png';
    file_put_contents($dir . $file_name, $imageData);
    echo '<img src="'.$dir . $file_name.'" width="200px" height="200px">';
    $file_index++;
}

方案2:使用唯一ID生成函数

直接调用PHP内置的uniqid()生成唯一文件名,无需额外维护变量:

// 替换原有文件名相关逻辑
$file_name = uniqid() . '.png';
file_put_contents($dir . $file_name, $imageData);
echo '<img src="'.$dir . $file_name.'" width="200px" height="200px">';

可选优化

以下逻辑无需在循环内重复执行,可移到while循环外部减少性能开销:

  • 目录存在性判断及创建逻辑,仅需执行一次即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:09:00