php - 如何使用 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 注入。
解决方案
不建议将图像存储在数据库中,检索速度慢,一切都慢。
人们所做的是,他们将图像存储在 CDN、AWS S3 或您喜欢的任何提供商中,然后在您存储 URL 的数据库中。
真的不建议做你想做的事情。
推荐阅读
- java - jhipster/spring keycloak 集成 - 设置自定义 redirect_uri
- android - 在 AutocompleteSupportFragment 中只想显示机场建议?
- c# - 将 C# UdpClient 连接到代理
- python-3.x - 除了长度之外,这两个代码块之间有区别吗?
- angular - Angular OnChange、DoCheck 和 Observables
- unity3d - 如何为 xbox 编写程序并使用它的 GPU?
- python - 使用 APScheduler 在 python 中进行并行编程的最佳方法是什么?
- sql - 即使为零,也要计算组中的行数?
- blazor - 如何将 max 属性添加到 InputDate 组件
- javascript - 向 Alpine.js UI 添加标志 - 动态类名