【问题标题】:read and write image from or to database从或向数据库读取和写入图像
【发布时间】:2013-10-14 11:26:24
【问题描述】:

我尝试显示存储在数据库中的图像。我用

写的
$image = file_get_contents($testPfad);
$dateigroesse = filesize($testPfad);

$arrData = unpack("H*hex", $image); 
$data_string = "0x".$arrData['hex']; 

$sql = "INSERT INTO EHS.dbo.T_Signaturen (UnterschriftsDateiName,UnterschriftsBild,Dateigroesse,terminID) VALUES (
        '".$unterschriftsFileName."',
        CONVERT(varbinary(max),'$data_string'),
        '".$dateigroesse."',
        '384_234')";
        echo '<hr>'.$sql;
        insert($sql);

使用此代码,我可以输出图像。

header("Content-type: image/jpeg");  
$query = "SELECT Dateigroesse, CONVERT(varchar(max), UnterschriftsBild) as content_data FROM EHS.dbo.T_Signaturen WHERE ID = '10'"; 
$result = query($query);
$content = $result[1]["content_data"];       
$filesize = $result[1]["Dateigroesse"]; 

$content = substr ($content, 2);             // entfernt 0x
$content = pack("H*", $content); 
print $content;  

一切正常,但只显示图像的一部分。我将图像大小从 20kb 减小到 2kb,并且显示了更多内容,所以我认为二进制数据在任何地方都被剪切了。数据库列是 varbinary(max)

请不要讨论将 blob 存储在数据库中是否合理:) :)

【问题讨论】:

  • 为什么要将图片保存在数据库中?保存到文件夹和保存路径到数据库不是更好吗?
  • 因为安全原因和 php 设置是不可能的

标签: php tsql blob varbinarymax


【解决方案1】:

解决方案是增加 php.ini 中 odbc 的最大可接受字符串长度。它设置为 4069 个字符

【讨论】:

    【解决方案2】:
    • 您是否尝试将列定义为 BLOB(最大 2 GB)?
    • 您确定完整的图像已存储(可能该功能有误)

    【讨论】:

    • - SQL 不支持 BLOB。 nvarbinary 是一个可变宽度的二进制字符串。最大 2GB - 我可以从 SQL Server 管理 Studio 复制和粘贴的数据字符串比字符串 php echoes 长得多
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    相关资源
    最近更新 更多