我在mysql中使用了blob数据类型,并且我在bind_para字母" b"中使用了blob,我可以看到文件夹中的图像,但它不能保存在数据库中,所以这是下面的bind_para名称$文件,如果我更换blob" b"用字母" s"在bind_para中它将保存[BLOB - 20 B]所以字母" b"是不是存储图像?
<form action="upload.php" method="post" enctype="multipart/form-data">
Select image to upload:
<input type="file" name="fileToUpload">
<input type="submit" value="Upload Image" name="submit">
</form>
这是upload.php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$file="uploads/".$_FILES["fileToUpload"]["name"];
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
准备好的声明:
$stmt = mysqli_stmt_init($connection);
$query = "INSERT INTO user (firstname, lastname, email, password, image, birthday, gender) VALUES (?, ?, ?, ?, ?, ?, ?)";
mysqli_stmt_prepare($stmt, $query);
mysqli_stmt_bind_param($stmt, "sssssss", $firstname, $lastname, $email, $password, $file, $birthday, $gender);
mysqli_stmt_execute($stmt);
答案 0 :(得分:2)
您正在将文件移动到名为uploads
的文件夹中。到现在为止还挺好。现在,您需要将其路径存储为数据库中的字符串。 $file
是路径字符串,您将它发送到数据库 - 再次很好。
唯一错误似乎是您尝试将该路径字符串存储在blob
列中。只需将其更改为varchar
列即可。
您无需将文件保存在数据库中,因为您已经保存在uploads
文件夹中的磁盘上。您只需要以这样的方式存储它的路径,以便稍后可以再次访问它。
我的建议是忘记将文件的内容存储在数据库中,效率不高。你(几乎)完成它的方式通常是一种更好的方法。
P.S。注意Akintunde的评论 - 你应该写一些代码来检查上传了什么类型的文件,并且可能不允许包含恶意内容的脚本或exe文件等内容。