【问题标题】:PHP and SQL Server - Retrieve image from an image fieldPHP 和 SQL Server - 从图像字段中检索图像
【发布时间】:2012-03-30 06:00:02
【问题描述】:

所以我有一个网络摄像头小部件可以为客人拍摄快照。我的 guest 表有一个 image 字段,我想在上面存储这张图片。我尝试存储 原始二进制 数据、base64 编码数据,但没有成功。我不知道数据库是否正在接收正确的数据,或者我是否没有很好地处理返回的数据。我在我的应用程序中使用 PDO,我在网上看到它可能会遇到大于 64 kb 的数据的问题,有人知道这是不是真的吗?

这就是我从网络摄像头获取图像数据的方式:

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

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

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

对于这两种情况,我也尝试过使用 base64 进行编码,但都没有成功。

仅供参考:我正在使用的这个应用程序是对另一个也具有此功能的类似应用程序的翻版,但在这个旧应用程序上,我使用了 TSQL,它运行良好。

感谢您的建议。

编辑

目前我已经很好地完成了插入,但我无法在浏览器中检索渲染图像。

【问题讨论】:

    标签: php sql-server image binary


    【解决方案1】:

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

    【讨论】:

    • 是的,我知道,但最好是这样。你如何建议编码为 blob,我该怎么做?谢谢。
    • www.techcubetalk.com/2009/01/tutorial-on-how-to-store-images-in-mysql-blob-field/ 检查该链接。
    【解决方案2】:

    如果您使用PreparedStatement,您只需将bindValue 与您的二进制图像一起使用:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-03-03
      • 2016-12-06
      • 1970-01-01
      • 2014-08-22
      • 2018-07-28
      • 1970-01-01
      • 2013-07-25
      • 1970-01-01
      • 2011-01-05
      相关资源
      最近更新 更多