无法从sqlite读取blob数据

时间:2010-09-19 20:45:36

标签: php sqlite binary blob bada

我用这样的

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

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

由于

1 个答案:

答案 0 :(得分: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 ++程序中。
  3. 希望你的船晃动。 ;)

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