所以我有一个网络摄像头小部件来从客人那里拍摄快照。我的来宾表中有一个图像字段,我想在其上存储此图片。我尝试存储原始二进制数据, base64 编码数据但它不起作用。我不知道数据库是否正在接收正确的数据,或者我是否不能很好地处理返回的数据。我在我的应用程序中使用 PDO 并且我在网上看到它可能存在大于 64 kb 的数据的问题,任何人都知道它是否属实?< / p>
这是我从网络摄像头获取图像数据的方式:
$imagem = file_get_contents('php://input');
就像我上面所说的那样,我试图存储图像的纯数据$imagem
然后这样:
$data = @unpack("H*hex", $imagem);
$imagem_bd='0x'.$data['hex'];
对于这两种情况,我也尝试使用 base64 编码,但都没有用。
仅供参考:我正在使用的这个应用程序是另一个具有此功能的类似应用程序的翻版,但在这个旧的应用程序上,我使用TSQL,它工作正常。
先谢谢。
修改
现在我已经完成了插入,但我无法在浏览器中检索和渲染图像。
答案 0 :(得分:3)
你可以用blob而不是base64编码图像。但我建议您将图像存储为文件并将链接存储到数据库中的图像。由于在数据库中存储图像可能会占用大量空间并且返回它可能会占用您的服务器,并且与文件系统相比,它可能需要更多时间来加载。
答案 1 :(得分:1)
如果您使用PreparedStatement
,您只需使用bindValue
和二进制图片:
$sql = "INSERT INTO your_table (image) VALUES (?)";
$stmt->bindValue(1, $imagem);
$stmt->execute();
无论如何,正如这里所说,将图像存储在数据库中并不是一个好主意。
关于64KB限制,它取决于表中列的数据类型(在MySQL中,BLOB类型的限制为64KB,但还有其他类型的数据,如MEDIUMBLOB和LONGBLOB)