我目前正在使用 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,并使用一个方便的函数将其转换回二进制,以便于操作其大小、深度等。