2010-09-19 4 views
2

я хранить данные больших двоичных объектов с PHP как этотОшибка чтения двоичных объектов данных из SQLite

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

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

Благодаря

+0

Учитывая, что в миксе есть PHP 5.2 и 5.3, скорее всего, это связано с различием в библиотеке sqlite. Вероятно, ошибка, которая была исправлена ​​к тому времени, когда была установлена ​​ваша установка Ubuntu. –

+0

Я тоже так думаю. Но проблема в том, что я не могу обновить sqlite на моем общем хостинге. Я надеюсь, что есть решение для старой версии. – Peacemoon

ответ

0

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

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

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

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

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

Смежные вопросы