2017-09-23 205 views
0

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

无效的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

我该怎么办?

+0

张贴您的表格结构与数据类型 – Ravi

+1

请张贴代码检索图像并执行INSERT语句。否则,你可以找到教程https://blogs.oracle.com/oswald/phps-mysqli-extension:-storing-and-retrieving-blobs – fyrye

+1

就我个人而言,我从不在数据库中存储图像:我将它们保存在服务器上某处我在数据库中存储他们的路径。这样,数据库仍然较轻。然后,当我需要使用该映像时,从数据库中检索它的路径变得快速简单。 – Marco

回答

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或其他东西)。