0

我最近接手了一个 PHP/CakePHP 项目。现在我想将框架从 CakePHP 1.3 更新到 CakePHP 2.2。数据库服务器是 MS SQL Server(版本 10.50)。我还尝试连接到 SQL Sever 版本 9.0 SP1。同样的问题。应用程序连接到数据库服务器,可以很好地读取文本数据。

如果我想读取 blob/binary/image 列,就会出现问题。这似乎是一个解码问题,但我不知道它可能发生在哪里。在 CakePHP 1.3 版本中,我看到类似

\x2 \x0\x1xÚmŽÁN„0\x10†_¥öN...

在我得到的 CakePHP 2.2 版本中

0220000178DA6D8EC14E8430 ... 

存储的项目是一个压缩的 XHTML 文件,附加了一些描述标签。它是由另一个应用程序编写的。

我已将应用程序编码设置为 UTF-8,并尝试在数据库配置中设置 encoding='utf8' 字符串(即使它应该只适用于 MySQL)。我已经更新了 Microsoft 的 Native SQL Client。我正在使用带有 PHP 5.3.8 的 XAMPP 1.7.7 安装。我也尝试过使用 XAMPP 1.8 和 Microsoft 的新 SQL-PDO 驱动程序进行不同的安装。没有任何帮助。

我不知道这个问题来自哪里,即使我怀疑 PDO 层/PHP 驱动程序。

该应用程序在 CakePHP 1.3 上运行良好。

感谢您的帮助/时间。

4

1 回答 1

0

我已经想通了。问题是 MS 的 PDO 层中的一个已知错误。可以用litte函数修复

function hextostr($x) 
{
  $s='';
  foreach(explode("\n",trim(chunk_split($x,2))) as $h) $s.=chr(hexdec($h));
  return($s);
}

来自 Marko Kozjak 在http://jeremycook.ca/2010/02/21/handling-binary-data-with-pdo/的评论

于 2012-09-07T05:37:06.523 回答