首页 >后端开发 >php教程 >为什么我的 PHP 代码无法将图像插入 MySQL BLOB 列?

为什么我的 PHP 代码无法将图像插入 MySQL BLOB 列?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-30 09:33:11220浏览

Why is my PHP code failing to insert images into a MySQL BLOB column?

使用 PHP 在 MySQL 数据库中插入 BLOB:图像存储故障排除

尝试在 MySQL 数据库中存储图像时,您可能会遇到问题如果提供的查询无法正确保存数据。让我们深入研究问题并探索潜在的解决方案。

问题:

给定提供的包含 ImageId(整数)和 Image(longblob)列的表结构,以下查询被利用:

$sql = "INSERT INTO ImageStore(ImageId,Image)               
VALUES('$this->image_id','file_get_contents($tmp_image)')";

尽管获得了预期的结果file_get_contents($tmp_image) 打印其值时,数据未存储在数据库中。

解决方案:

解决方案 1:变量插值

您构建的查询容易受到常见 PHP 陷阱的影响。当您在双引号字符串中嵌入变量 file_get_contents($tmp_image) 时,PHP 将不会自动执行该函数。相反,它会将其视为文字字符串,从而将“file_get_contents($tmp_image)”写入数据库而不是其返回值。

要正确连接 file_get_contents($tmp_image) 的结果,您需要退出双引号字符串:

$sql = "INSERT INTO ImageStore(ImageId,Image)
        VALUES('$this->image_id','" . file_get_contents($tmp_image) . "')";

解决方案 2:清理

如果二进制数据包含单引号('),则查询将无效。为了防止这种情况,请在插入数据之前使用 mysql_escape_string 清理数据:

$sql = "INSERT INTO ImageStore(ImageId,Image)
        VALUES('$this->image_id','" . mysql_escape_string(file_get_contents($tmp_image)) . "')";

解决方案 3:替代存储

在关系数据库中存储大型二进制数据 (BLOB) 可以效率低下。考虑替代存储选项,例如专为二进制数据管理设计的单独文件或云存储服务。

以上是为什么我的 PHP 代码无法将图像插入 MySQL BLOB 列?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn