首页 > 解决方案 > 如何使用 php 参数绑定图像?

问题描述

编辑:我的 Ajax 发送图像数据是这样的

  var Image = $('#PostSection').find('input[name="Image2"]').val();

    var fd = new FormData();
    var files = $('#Image2')[0].files[0];
    console.log(files);
    fd.append('Image',files);
    fd.append('username',username);
    fd.append('posts',posts);
    fd.append('backText3',backText3);
    fd.append('poll',poll);
    fd.append('option1',option1);
    fd.append('option2',option2);
    fd.append('option3',option3);
    fd.append('option4',option4);
    $.ajax({
        url: '../Admin/Posts/Post.php',
        type: 'post',
        data: fd,
        contentType: false,
        processData: false,
        success:  function() {
     $('#AllPosts').prepend($('<div>').load(location.href + " 
#AllPosts>*"));
  $('#PostSection')[0].reset();
     var x = document.getElementById("snackbar2");
  x.className = "snackbar show";
  setTimeout(function(){ x.className = x.className.replace("show", ""); }, 
3000);

请记住,我只显示图像的变量,因为这与我的问题有关。我不需要被告知用户名、帖子、投票等的代码。这与我的问题无关。

我的图像是这样检索的

  $tmpName  = $_FILES['Image']['tmp_name'];
  $fp = fopen($tmpName, 'r');
  $Image = fread($fp, filesize($tmpName));
  $Image = addslashes($Image);
  fclose($fp); 

我的插入代码是这样的

$stmt = $conn3->prepare("INSERT INTO `$Username` (Username,RepostedBy,RepostedId,Texts,Img,backText,Dates,TimeUploaded,EditedVersion,Likes,Repost,Tags,Poll)
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)");

$stmt->bind_param("ssssbssssssss",$Username,$RepostedBy,$RepostedId,$Texts,$Image,$BackText,$Date,$Time,$EditedVersion,$Likes,$Shares,$Tags,$Poll);

但由于某种原因,这不起作用。我的图片专栏是 longblob。其他所有内容都已插入,但由于某种原因图像未正确插入。插入了一个文件,但它不是图像。正如我所说,在评论之前请注意,除了图像没有正确插入之外,所有内容都按应有的方式插入。我不需要任何回复来询问我与数据库的连接或我的任何变量是否为空。谢谢!

插入的文件是图像,当图像的存储空间不应该那么高时,我的数据库说其中一些是 129 kib。我尝试了这样做的非专业方法

$sql = "INSERT INTO `$Username` (Username,RepostedBy,RepostedId,Texts,Img,backText,Dates,TimeUploaded,EditedVersion,Likes,Repost,Tags,Poll) 
VALUES ('$Username','$RepostedBy','$RepostedId','$Texts','$Image','$BackText','$Date','$Time','$EditedVersion','$Likes','$Shares','$Tags','$Poll');";

这可行,但它不是一个准备好的语句,所以它根本不理想或不专业,因为我不想进行 SQL 注入。

标签: phpimageprepared-statement

解决方案


不建议将图像存储在数据库中,检索速度慢,一切都慢。

人们所做的是,他们将图像存储在 CDN、AWS S3 或您喜欢的任何提供商中,然后在您存储 URL 的数据库中。

真的不建议做你想做的事情。


推荐阅读