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

如何使用PHP将MySQL查询获取的消费者数据生成专属QR码?

MySQL用户数据转QR Code实现方案(PHP环境)

核心前提说明

不建议直接将用户全部数据编码进QR Code,原因有二:

  1. QR Code容量有限,最多只能存储4296个字母数字字符,用户数据量大时根本放不下
  2. QR Code内容是明文的,任何人扫码都可直接读取,直接存用户敏感数据会有严重的隐私泄露风险

最优实现方案(在线查询模式)

核心逻辑:QR Code仅存储用户独有的不可枚举标识串,扫码时后端通过标识查询数据库返回用户信息,兼顾容量与安全性。
具体步骤如下:

  • 第一步:给consumer表新增唯一标识字段
    新增字段user_qr_token VARCHAR(64),设置唯一索引,给每个已有用户生成独有的随机token,生成方式参考:
    $token = bin2hex(random_bytes(32)); // 生成64位随机字符串,几乎不存在碰撞可能
    
    新用户注册时同步生成该token即可。
  • 第二步:引入PHP QR Code生成依赖
    推荐使用轻量纯PHP实现的phpqrcode库,无需安装额外扩展,下载源码引入项目即可使用。
  • 第三步:编写用户登录页二维码生成逻辑
    用户登录成功后,从session中读取当前用户的user_qr_token,拼接为查询接口地址后生成二维码,示例代码:
    session_start();
    require 'phpqrcode/qrlib.php';
    
    // 拼接二维码内容:查询接口地址+当前用户token
    $qrContent = "https://你的项目域名/api/get_consumer_data.php?token=" . $_SESSION['user_qr_token'];
    
    // 直接输出二维码图片到浏览器
    header('Content-Type: image/png');
    // 参数说明:二维码内容、输出文件(null为直接输出)、容错级别、二维码像素大小
    QRcode::png($qrContent, null, QR_ECLEVEL_L, 4);
    
    前端直接将该接口地址作为img标签的src属性即可展示二维码。
  • 第四步:编写扫码对应的用户数据查询接口
    新建get_consumer_data.php处理扫码请求,逻辑示例:
    header('Content-Type: application/json; charset=utf-8');
    // 数据库连接示例,替换为你自己的连接配置
    $pdo = new PDO('mysql:host=127.0.0.1;dbname=your_db;charset=utf8mb4', 'db_user', 'db_pwd');
    
    $token = trim($_GET['token'] ?? '');
    if (empty($token)) {
        echo json_encode(['code' => 400, 'msg' => '无效请求']);
        exit;
    }
    
    // 预查询避免SQL注入
    $stmt = $pdo->prepare("SELECT * FROM consumer WHERE user_qr_token = ? LIMIT 1");
    $stmt->execute([$token]);
    $consumerData = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if (!$consumerData) {
        echo json_encode(['code' => 404, 'msg' => '用户信息不存在']);
        exit;
    }
    
    // 【重要】此处需添加权限校验逻辑,仅允许加油站授权账号的扫码请求获取数据
    // 示例:移除敏感字段后返回
    unset($consumerData['password'], $consumerData['id_card']);
    echo json_encode(['code' => 200, 'data' => $consumerData]);
    

可选方案(离线扫码场景)

如果你的使用场景要求无网络也能扫码读取数据,可按以下方式实现:

  • 仅提取必要的非敏感用户字段,总长度控制在200字符以内
  • 对拼接后的字段内容做AES对称加密,将加密后的字符串编码进QR Code
  • 扫码端持有解密密钥,读取到加密内容后解密得到用户数据,不要明文存储任何信息

注意事项

  • 可给用户提供二维码重置功能,用户token泄露后可直接生成新的token,旧二维码自动失效
  • 不要使用自增用户ID作为QR Code的查询参数,避免被人遍历爬取所有用户数据
  • 二维码容错级别建议设为L或M,兼顾识别速度和容错能力

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:54:04