我目前使用的是 SQL Server 2000,用作 ODBC 访问的数据源,在运行 Windows 2000 的 Apache 2 服务器上测试 PHP 脚本。
我试图使用 ODBC 从数据库获取图像,但当我使用 odbc_result() 函数获取结果时,输出总是自动刷新。
使用这段代码,一旦我点击 odbc_result(),图片就会自动打印到浏览器(可能是一个错误,但是错误报告并不容易)。
<?php
$connH=odbc_pconnect("ImageDB","sa","",SQL_CUR_USE_IF_NEEDED) or die(odbc_errormsg());
$result=odbc_exec($connH, "SELECT Emp_Image FROM tblEmployeePics WHERE Emp_Id=547");
if ($result) {
odbc_longreadlen($result, 131072);
odbc_binmode($result,ODBC_BINMODE_PASSTHRU);
$m_FValue=odbc_result($result, 1);
}
?>
... 在抓狂了 48 小时后,我终于找到了一个变通方法,但是使用的是 bin2hex() 函数文档中的一个函数...
<?php
function hex2bin($data){
$len = strlen($data);
return pack("H" . $len, $data);
}
$connH=odbc_pconnect("ImageDB","sa","",SQL_CUR_USE_IF_NEEDED) or die(odbc_errormsg());
$result=odbc_exec($connH, "SELECT Emp_Image FROM tblEmployeePics WHERE Emp_Id=547");
if ($result) {
odbc_longreadlen($result, 131072);
odbc_binmode($result,ODBC_BINMODE_CONVERT);
$m_FValue=odbc_result($result, 1);
$out=hex2bin($m_FValue);
}
?>
诀窍是通过将 odbc_binmode 更改为 ODBC_BINMODE_CONVERT 并使用一个方便的函数将其转换回二进制来将输出转换为十六进制,以便于操作其大小、深度等...