从MSSQL DB检索的图像文件中缺少部分数据

时间:2012-04-27 11:54:26

标签: php sql-server image

我正在尝试显示保存在图像字段中的数据库。但我只能看到63KB的图像。

这是我的代码:

$sql='SELECT Photo FROM Personel WHERE ID_USER = '.$id;

$result=mssql_query($sql);

$res=mssql_fetch_assoc($result);

header('Content-type:image/jpeg');
echo$res['Photo']; 

你可以看到没什么特别的,所以我认为在数据库或服务器配置方面存在问题。

安装在Windows XP服务器上的数据库。

实际上它是访问控制系统DB,以及安装在该程序文件夹中的SQL文件,但不知道这些信息是否有用。

有什么想法吗?

更新 照片字段类型的屏幕截图: Screenshot of Photo field type

4 个答案:

答案 0 :(得分:5)

遇到同样的问题,先运行一下:

mssql_query('SET TEXTSIZE 10000000'); // sets limit to 10MB

答案 1 :(得分:1)

检查您是否对字段Photo有限制。

答案 2 :(得分:1)

您可能正在使用blob字段的数据类型(例如Photo),该字段对您要保存的图片的大小限制太多。每种数据类型对可以存储在该字段中的数据量有不同的限制。

有关不同字段类型及其相关存储容量/适用性的示例,请参阅this page in the MySQL documentation

例如,blob类型的限制为2 ^ 16字节(64K)。

如果您的图片大于(非常可能),请尝试将字段类型更改为mediumblob(2 ^ 24 = 16.78MB)。

如果您正在处理真正的大图像,那么您可能需要longblob(2 ^ 32 = 4.29 GB),但在那个阶段,您将拥有更多只是数据存储问题:)

答案 3 :(得分:1)

鉴于您的评论表明整个图像 存储在数据库中,因此问题可能与PHP中的数据限制/超时有关。或网络服务器。

编辑:我在这里留下了以下部分答案的历史信息(以显示我们尝试过的其他内容),但请参阅下面的评论,因为这个问题更可能与PHP或Web服务器配置设置有关,限制响应数据的大小。尚未完全解决。


我注意到您有一个Content-type标题,但不是Content-length标题。

您可以尝试添加一个Content-length标头,其中包含一些任意的已知值(例如12288)并查看这是否会影响返回文件的大小(因为您知道它目前是63K - 是否会更改为12K? )

如果确实如此,那么您需要让PHP计算/找出图像的实际大小,并添加该长度的Content-length标题。