HTML表单上传图片至本地数据库失败:$_FILES无法获取图片
问题解决:图片无法存入MySQL数据库
核心错误分析
你代码中获取图片内容的逻辑完全错误:
$img = file_get_contents($_FILES['myimage']['name']);
$_FILES['myimage']['name']是用户上传文件的原始文件名,并非服务器临时存储文件的实际路径。正确的做法是使用$_FILES['myimage']['tmp_name'],这是PHP接收上传文件后,在服务器临时目录生成的文件路径。
修正后的完整PHP代码
<?php $host = "localhost"; $dbUserName = "root"; $password = ""; $dbname = "mydb"; // 先检查文件上传是否出现错误 if ($_FILES['myimage']['error'] !== UPLOAD_ERR_OK) { die("文件上传失败,错误码:" . $_FILES['myimage']['error']); } // 读取服务器临时文件中的图片内容 $img = file_get_contents($_FILES['myimage']['tmp_name']); $fname = $_POST['fname']; // 开启错误报告模式 mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); // 建立数据库连接 $conn = mysqli_connect($host, $dbUserName, $password, $dbname); // 准备插入SQL语句 $sql = $conn->prepare("INSERT INTO mytable (image_soldier, fname_soldier) VALUES (?, ?)"); // 绑定参数:b对应二进制类型,s对应字符串类型 $sql->bind_param("bs", $img, $fname); // 执行插入操作 $sql->execute(); echo "数据插入成功"; ?>
额外必查项
- 数据库字段类型:确保
image_soldier字段的类型为MEDIUMBLOB或LONGBLOB,普通BLOB仅支持最大64KB存储,绝大多数图片都会超出这个限制。 - PHP配置限制:检查php.ini中的
upload_max_filesize和post_max_size参数,将其设置为足够容纳目标图片的大小(例如10M)。 - 文件有效性验证:后端可通过
getimagesize()函数判断上传文件是否为有效图片,避免恶意文件被存入数据库。
内容的提问来源于stack exchange,提问作者Am Salman
相关产品推荐
相关产品推荐

