无法从MySQL检索图片:PHP读取数据库图片失败求助
图片无法显示问题排查
问题背景
通过MySQL创建product表并存储图片文件名,PHP页面无法正常显示图片,图片文件与PHP文件处于同一目录。相关代码如下:
PHP代码片段
<?php require_once "dbconfig.php"; $select_stmt=$db->prepare("SELECT * FROM product"); $select_stmt->execute(); while($row=$select_stmt->fetch(PDO::FETCH_ASSOC)) { ?> <div class="col-lg-4 col-md-6 mb-4"> <div class="card h-100"> <a href="#"><img class="card-img-top" src="images/<?php echo $row['product_image']; ?>"</a> <div class="card-body"> <h4 class="card-title text-primary"><?php echo $row['product_name']; ?> </h4> <h5><?php echo number_format($row['product_price'],2); ?>/-</h5> </div> <div class="card-footer"> <form class="form-submit"> <input type="hidden" class="pid" value="<?php echo $row['product_id']; ?>"> <input type="hidden" class="pname" value="<?php echo $row['product_name']; ?>"> <input type="hidden" class="pprice" value="<?php echo $row['product_price']; ?>"> <input type="hidden" class="pimage" value="<?php echo $row['product_image']; ?>"> <input type="hidden" class="pcode" value="<?php echo $row['product_code']; ?>"> <button id="addItem" class="btn btn-success btn-md">Add to Cart</button> </form> </div>
MySQL建表语句
CREATE TABLE IF NOT EXISTS product ( product_id int(11) NOT NULL, product_name varchar(100) NOT NULL, product_price varchar(50) NOT NULL, product_image varchar(255) NOT NULL, product_code varchar(10) NOT NULL )
数据插入语句
INSERT INTO product (product_id, product_name, product_price, product_image, product_code) VALUES (1, 'laptop', '200', 'laptop.jpg', 'p1000');
排查步骤及修复方案
路径错误:
PHP代码中图片路径写为images/<?php echo $row['product_image']; ?>,但你明确说明图片与PHP文件在同一目录,因此需要去掉images/前缀,修改为:<img class="card-img-top" src="<?php echo $row['product_image']; ?>" alt="<?php echo $row['product_name']; ?>">HTML语法错误:
原代码中的<img>标签未闭合,缺少结尾的>,这会导致浏览器解析失败,必须补充完整标签结构(同时建议添加alt属性提升可访问性)。数据库数据验证:
确认product_image字段存储的文件名无拼写错误、多余空格,且与实际图片文件名完全一致(注意Linux服务器区分大小写,如Laptop.jpg和laptop.jpg视为不同文件)。文件权限检查:
确保图片文件的权限允许Web服务器读取,Linux环境下建议设置文件权限为644,所在目录权限为755。额外优化建议:
product_price字段当前为varchar类型,使用number_format处理时若存储非数字内容会报错,建议修改为decimal(10,2)类型更符合价格存储需求:ALTER TABLE product MODIFY product_price decimal(10,2) NOT NULL;
内容的提问来源于stack exchange,提问作者Fatima
相关产品推荐
相关产品推荐

