如何通过含多引号的查询从数据库读取并显示图片?
解决数据库读取图片并处理引号/语法错误的问题
我来帮你搞定这个问题,你的代码主要存在引号冲突、废弃数据库扩展、SQL注入风险,还有图片字段读取的小问题。下面是修复后的完整代码,再逐一解释细节:
// 首先连接数据库(用mysqli替代已废弃的mysql扩展) $conn = mysqli_connect('localhost', '你的数据库用户名', '你的数据库密码', '你的数据库名'); if (!$conn) { die('数据库连接失败: ' . mysqli_connect_error()); } // 用预处理语句处理查询,彻底解决引号问题+防SQL注入 $init = 1; // 假设你的$init是数字类型,如果是字符串,绑定参数时换类型标识即可 $stmt = mysqli_prepare($conn, "SELECT * FROM `Rorschach` WHERE Rid = ?"); mysqli_stmt_bind_param($stmt, "i", $init); // "i"代表整数,字符串用"s" mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); $query2 = mysqli_fetch_assoc($result); // 用关联数组,字段名直接调用更清晰 if ($query2) { $rid = $query2['Rid']; $rname = $query2['Rname']; $rimage = $query2['Rimage']; // 直接获取二进制图片数据 ?> <!-- 跳出PHP标签直接写HTML,完全避免引号冲突,可读性拉满 --> <div class="tab-pane active" id="profile"> <table class="table"> <tbody> <tr> <td class="td-actions text-right"> <img src="data:image/jpeg;base64,<?php echo base64_encode($rimage); ?>" height="200" width="200" class="img-thumbnail" /> <!-- 你原来的代码截断了,比如radio组件可以继续在这里编写,注意引号统一即可 --> </td> </tr> </tbody> </table> </div> <?php } else { echo "未找到对应记录"; } // 清理资源 mysqli_stmt_close($stmt); mysqli_close($conn);
关键问题修复说明
- 替换废弃的mysql扩展:
mysql_*函数早在PHP 5.5就被标记为废弃,PHP 7之后直接移除了,必须换成mysqli或PDO,上面用的是mysqli面向过程写法,贴近你原来的编码习惯。 - 解决SQL查询的引号与注入问题:直接把变量拼进SQL里,不仅容易出现引号语法错误(比如$init是字符串时没加引号会报错),还会引发严重的SQL注入漏洞。用预处理语句+参数绑定,数据库会自动处理引号和数据类型,彻底规避这些问题。
- 修复HTML输出的引号冲突:你原来的echo语句里,用单引号包裹HTML字符串,但HTML属性(比如
class='tab-pane')又用了单引号,直接导致语法报错。这里推荐跳出PHP标签写HTML,既不用转义引号,代码可读性也更高;如果非要用echo输出,记得统一引号规则(比如PHP用双引号,HTML属性用单引号,或者反过来),或者用\'转义内部单引号。 - 正确读取图片字段:你原来的代码里
$rimage = $query2[2];之后又写$rimage['Rimage'],这是错误的——$query2[2]是索引数组的第三个元素(二进制图片数据),而$rimage['Rimage']是关联数组的写法,两者不能混用。用mysqli_fetch_assoc获取关联数组后,直接用字段名$query2['Rimage']读取更清晰。
内容的提问来源于stack exchange,提问作者Ameya
相关产品推荐
相关产品推荐

