Не удалось прочитать данные BLOB-объектов из SQLite - PullRequest
2 голосов
/ 20 сентября 2010

Я храню данные BLOB-объектов с помощью php следующим образом:

$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-объектов обратно.Проблема в том, что когда я использую php на своем локальном хосте (версия 5.3.2-1ubuntu4.2), мое приложение на c ++ может правильно распознавать столбец blob как тип blob.Но когда я использую свой удаленный хост (php версии 5.2.12) для создания файла sqlite, мое приложение на языке c ++ распознает столбец BLOB-объектов как TEXT TYPE, а мои двоичные данные повреждены.

Кто-нибудь знает, почему и какие-либо действия вокруг?

Спасибо

1 Ответ

0 голосов
/ 16 декабря 2011

Убедитесь, что вы читаете и пишете те же версии SQLite, а не: Server = SQLite2 <-> C ++ = SQLite2 или Server = SQLite3 <-> C ++ = SQLite3, потому что это не удастся.

Если этопроблема (которая, скорее всего, имеет место из-за изменений в SQLite, делающих две версии несовместимыми для чтения, наоборот), у вас есть два варианта:

  1. вы можете либо обновить свой сервер (спроситьваш провайдер), или
  2. , вы можете использовать соответствующий исходный код C ++, чтобы позволить вашему программному обеспечению считывать то, что может обрабатывать ваш сервер.Для этого вы можете получить исходный код SQLite2 (а также всех других сборок, которые там заархивированы) на sqlite.org.Если быть более точным, вы можете найти последнюю версию исходной версии SQLite2 для самой последней версии по адресу http://www.sqlite.org/cgi/src/info/47fee16ba9, чтобы вы могли скомпилировать поддержку в вашу программу на С ++.

Надеюсь, что ваша лодка потрясет.;)

PS: Если проблема не в этом, и вы читаете / пишете в одни и те же версии SQLite, вы можете попытаться закодировать двоичные данные, которые вы пытаетесь сохранить, в шестнадцатеричном формате и сохранить их в TEXT вместоBLOB.Это обходной путь, но он работает.

...