如何使用PHP将数据库idNum字段内容写入生成的QR二维码?
问题修复方案
核心错误原因
- 你编写的尝试代码存在多处逻辑错误,导致二维码内容无效:
$id=isset($_POST['idNum'])写法错误:isset()函数仅返回布尔值(存在返回true/1,不存在返回false/空),并不会返回$_POST['idNum']的实际值,因此二维码生成的内容本身就是错误值,扫描后自然无有效内容- 执行数据库查询后未从结果集中提取
idNum字段值,直接将错误的布尔类型$id作为二维码内容,完全没有用到数据库存储的字段值 - 直接将参数拼接进SQL语句存在SQL注入风险,需要用预处理语句优化
- 原有phpqrcode示例代码存在变量名大小写不一致问题:
$frame_size定义时为小写s,调用时写的$frame_Size为大写S,PHP对变量名大小写敏感,会导致生成时报错
正确实现代码(基于phpqrcode库版本,替换原示例中的固定文本)
// 数据库连接 $connection = mysqli_connect("localhost", "root", "", "db_bakascts") or die(mysqli_connect_error()); // 正确接收POST参数,先判断存在再取值,同时做空值校验 $id = isset($_POST['idNum']) ? trim($_POST['idNum']) : ''; if(empty($id)) { die("参数idNum不能为空"); } // 用预处理语句查询数据库,避免SQL注入 $stmt = mysqli_prepare($connection, "SELECT idNum FROM tb_usersreg WHERE idNum = ? LIMIT 1"); mysqli_stmt_bind_param($stmt, "s", $id); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); $row = mysqli_fetch_assoc($result); if(empty($row)) { die("未查询到对应用户数据"); } // 取数据库中的idNum字段值作为二维码内容 $text = $row['idNum']; // 以下是修正后的phpqrcode生成逻辑 include('phpqrcode/qrlib.php'); $path = 'qrcodes/'; // 自动创建存储目录,避免目录不存在报错 if(!is_dir($path)) { mkdir($path, 0777, true); } $file = $path.uniqid().".png"; $ecc = 'L'; // 纠错级别 $pixel_Size = 170; $frame_size = 10; QRcode::png($text, $file, $ecc, $pixel_Size, $frame_size); // 可根据业务需求调整输出逻辑 echo "二维码生成成功,文件路径:".$file;
如果你要使用在线接口生成二维码,修复后的代码如下
// 数据库连接 $connection = mysqli_connect("localhost", "root", "", "db_bakascts") or die(mysqli_connect_error()); // 正确接收POST参数 $id = isset($_POST['idNum']) ? trim($_POST['idNum']) : ''; if(empty($id)) { die("参数idNum不能为空"); } // 预处理查询 $stmt = mysqli_prepare($connection, "SELECT idNum FROM tb_usersreg WHERE idNum = ? LIMIT 1"); mysqli_stmt_bind_param($stmt, "s", $id); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); $row = mysqli_fetch_assoc($result); if(empty($row)) { die("未查询到对应用户数据"); } $qr_text = urlencode($row['idNum']); // 内容需要URL编码避免特殊字符报错 $width = "250"; $height = "250"; $url = "https://chart.googleapis.com/chart?cht=qr&chs={$width}x{$height}&chl={$qr_text}"; $qr["img"] = $url;
内容的提问来源于stack exchange,提问作者mariakz
相关产品推荐
相关产品推荐

