我在 mysql 中使用了 blob 数据类型,也在 bind_para 字母“b”中使用了 blob,我可以在文件夹中看到图像,但它无法保存在数据库中,所以这是下面的 bind_para 名称 $file,如果我替换 blob“b"在 bind_para 中使用字母 "s"它将保存 [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);
最佳答案
您正在将文件移动到名为 uploads
的文件夹中。到目前为止,一切都很好。现在您需要将它的路径作为字符串存储在数据库中。 $file
是路径字符串,您将它发送到数据库 - 再次很好。
唯一的错误似乎是您试图将该路径字符串存储在 blob
列中。只需将其更改为 varchar
列即可。
您不需要将文件保存在数据库中,因为您已经保存在磁盘上的 uploads
文件夹中。您只需要存储它的路径,以便您以后可以再次访问它。
我的建议是忘记将文件的内容 存储在数据库中,这样效率不高。您(几乎)完成它的方式通常是更好的方法。
附言注意 Akintunde 的评论 - 您应该编写一些代码来检查上传的文件类型,并可能禁止可能包含恶意内容的脚本或 exe 文件。
关于php - 使用准备好的语句上传图像文件位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49234414/