2012-03-13 91 views
1

因此,我有一个网络摄像头小部件可以从客人处获取快照。我的客人表有一个图片字段,我想存储这张照片。我试图存储原始二进制数据,base64编码的数据,它没有奏效。我不知道数据库是否正在接收正确的数据,或者如果我没有很好地处理返回的数据。我在我的应用程序中使用PDO,并且我在网上阅读过它可能存在数据大于64 kb的问题,任何人都知道它是否属实?PHP和SQL Server - 从图像字段中检索图像

这是我从网络摄像头获得的图像数据:

$imagem = file_get_contents('php://input'); 

就像我上面说我试图存储图像的纯数据$imagem,然后是这样的:

$data = @unpack("H*hex", $imagem); 
$imagem_bd='0x'.$data['hex']; 

而对于这两个我试过编码base64也没有工作。

仅供参考:我正在使用的这个应用程序是另一个具有此功能的类似应用程序的翻拍,但在这个旧应用程序中,我使用了TSQL,并且它工作正常。

谢谢你。

编辑

现在我也做了插入很好,但我不能检索渲染在浏览器中的图像。

+0

任何人????????? – DontVoteMeDown 2012-03-13 19:58:37

回答

3

您可以将图像编码为blob而不是base64。但我建议你将图像存储为文件并将链接存储在数据库中。由于将图像存储在数据库中可能消耗大量空间,并且返回它可能会吃掉服务器,并且与文件系统相比,加载可能需要更多时间。

+0

是的,我知道,但它必须优选这种方式。你如何将blob编码为sugest,我该怎么做?谢谢。 – DontVoteMeDown 2012-03-14 13:47:38

+0

www.techcubetalk.com/2009/01/tutorial-on-how-to-store-images-in-mysql-blob-field/ 检查该链接。 – 2012-03-14 17:56:41

1

如果使用PreparedStatement,所有你需要做的是使用bindValue,与二值图像:

$sql = "INSERT INTO your_table (image) VALUES (?)"; 
$stmt->bindValue(1, $imagem); 
$stmt->execute(); 

无论如何,在这里说,它不是存储在数据库中的图像是一个好主意。

关于64KB限制,它取决于表中的列的数据类型(在MySQL中,BLOB类型的限制为64KB,但还有其他类型的数据,如MEDIUMBLOB和LONGBLOB)。

+0

到目前为止,没关系,请看我的编辑。 – DontVoteMeDown 2012-03-14 13:51:15