【问题标题】:Inserting image to a MySQL database [closed]将图像插入 MySQL 数据库 [关闭]
【发布时间】:2017-09-23 15:01:28
【问题描述】:

我正在尝试使用 blob 类型将图片保存在 MySQL 数据库中。当我直接从 phpMyAdmin 上传它时,它工作正常。但在我的 php 代码中它不起作用。 mysqli_error 方法返回

无效的 utf8 字符串:'\x89PNG'

注意:连接到我的数据库后,我使用代码:

mysqli_set_charset($Inventory_db, 'utf-8');
mysqli_query($Inventory_db,"set names 'utf8'");

当我删除它或插入 jpg 图像时,它还告诉我一个可怕的错误!

这是另一个错误:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 '????\0JFIF\0,,\0\0??\0tExif\0\0MM\0*\0\0\0\ 附近使用正确的语法0\0\0\0\0\0\0\0J\0\0\0' 在第 1 行

我该怎么办?

【问题讨论】:

  • 用数据类型发布你的表结构
  • 请在您检索图像的位置发布代码并执行INSERT 语句。否则你可以找到教程blogs.oracle.com/oswald/…
  • 就个人而言,我从不在数据库中存储图像:我将它们保存在服务器的某个位置,并将它们的路径存储在数据库中。这样,数据库仍然更轻。当我需要使用该图像时,从数据库中检索其路径既快捷又简单。
  • 啊抱歉..我只是有一张账单,其中有一列代表图像,其数据类型是 BLOB.. 问题已通过“mysqli_real_escape_string”解决 ^_^

标签: php mysql utf-8


【解决方案1】:

可能能够使用LOAD_FILE() 功能。请参阅手册中的限制https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_load-file

INSERT INTO ... (..., blob_col, ...)
    VALUES
    (..., LOAD_FILE('/path/to/file'), ...);

(正如@Marco 建议的那样...)对于网站,将文件留在磁盘上的某个地方是正常的,然后让<img src=...> 在页面呈现时获取它。

否则,Base64 可能是最好的选择。它确实将占用空间扩大了 8/6。

转义 8 位代码以构造用于插入 BLOB 的字符串的麻烦令人生畏。

问题中的 utf8 内容无关紧要。图片必须存储在BLOB,而不是TEXT(除非您已对其进行了base64或其他编码)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    相关资源
    最近更新 更多