php - 使用准备好的语句上传图像文件位置

标签 php mysql sql file blob

我在 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/

相关文章:

php - PHP 中缺少 Session_start 函数

mysql - 忽略结果的 2 个表的 2 列值的总和等于 0

mysql - 根据同一记录中的值选择字段

mysql - 执行 Mysql 查询,在某些位置屏蔽二进制字符串

sql - 递归删除一张表中的多行

php mysql 从多列中选择最小值

php - 为什么 $a += 3 比 $a = $a + 3 执行得更快?

PHP MYSQL : display contents of table then add into another table

sql - 如何从sql server中的子元素中删除空命名空间

mysql - 从mysql中删除重复的列值