2

我像这样用php存储blob数据

$this->_db->exec"CREATE TABLE media (url TEXT, content BLOB)");

$fp = fopen($encoded['path'], 'rb');
$sql = "INSERT INTO media (url, content) VALUES (?, ?)";
$stmt = $this->_db->prepare($sql);
$stmt->bindValue(1, $encoded['url'], PDO::PARAM_STR);
$stmt->bindValue(2, $fp, PDO::PARAM_LOB);
$stmt->execute();
fclose($fp);

在我的 c++ 程序(使用 bada 框架)中,我从 blob 列中读取数据。问题是,当我在本地主机(版本 5.3.2-1ubuntu4.2)上使用 php 时,我的 c++ 应用程序可以正确地将 blob 列识别为 blob 类型。但是当我使用我的远程主机(php 版本 5.2.12)创建 sqlite 文件时,我的 c++ 应用程序将 blob 列识别为 TEXT TYPE,并且我的二进制数据已损坏。

有谁知道为什么以及任何解决方法?

谢谢

4

1 回答 1

0

确保您正在读取和写入相同的 SQLite 版本,而不是: Server = SQLite2 <-> C++ = SQLite2 或 Server = SQLite3 <-> C++ = SQLite3,因为那样会失败。

如果这是问题所在(这很可能是由于 SQLite 中的更改导致两个版本不兼容而无法读取反之亦然),您有两个选择:

  1. 您可以更新您的服务器(询问您的提供商),或者
  2. 您可以使用适用的 C++ 源代码使您的软件能够读取您的服务器可以处理的内容。为此,您可以在 sqlite.org 上获取 SQLite2 的源代码(以及在此处存档的所有其他构建)。更准确地说,您可以在http://www.sqlite.org/cgi/src/info/47fee16ba9找到最新版本 SQLite2 源代码的最新下载,以便您可以将支持编译到您的 c++ 程序中。

希望能撼动你的船。;)

PS:如果这不是问题并且您正在读取/写入相同的 SQLite 版本,您可以尝试对您尝试存储的二进制数据进行十六进制编码并将其保存到 TEXT 而不是 BLOB。这是一种解决方法,但它有效。

于 2011-12-16T06:09:13.493 回答