使用 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中文网其他相关文章!