从数据库读取或写入数据库

时间:2013-10-14 11:26:24

标签: php tsql blob varbinarymax

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

写了
$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(最大)

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

  • 您是否尝试将列定义为BLOB(最多2 GB)?
  • 您确定存储完整的图像(可能该功能错误)