2010-09-19 25 views
2

i stocker des données blob avec php comme ceImpossible de lire les données blob de 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); 

Et dans mon C++ programme (en utilisant le framework bada) j'ai lu les données de la colonne de blob retour. Le problème est, quand j'utilise php sur mon localhost (version 5.3.2-1ubuntu4.2), mon application C++ peut reconnaître la colonne blob comme type de blob correctement. Mais quand j'utilise mon hôte distant (php version 5.2.12) pour créer un fichier sqlite, mon application C++ reconnaît la colonne blob comme TEXT TYPE et mes données binaires sont corrompues.

Est-ce que quelqu'un sait pourquoi et n'importe quel travail?

Merci

+0

Étant donné que vous avez PHP 5.2 et 5.3 dans le mix, c'est probablement dû à une différence dans la bibliothèque sqlite. Probablement un bug qui a été corrigé au moment où votre installation Ubuntu a été déployée. –

+0

je pense aussi. Mais le problème est, je ne peux pas mettre à jour sqlite sur mon hébergement partagé. J'espère qu'il y a une solution pour l'ancienne version. – Peacemoon

Répondre

0

Assurez-vous de lire et d'écrire les mêmes versions SQLite et non: serveur = SQLite2 < -> C++ = SQLite2 ou serveur = SQLite3 < -> C++ = SQLite3 parce que échouera.

Si c'est le problème (ce qui est probablement le cas en raison des changements dans SQLite, ce qui rend les deux versions incompatibles en lecture vice versa), vous avez deux options:

  1. vous pouvez mettre à jour votre serveur (demandez à votre fournisseur), ou
  2. vous pouvez utiliser le code source C++ applicable pour permettre à votre logiciel de lire ce que votre serveur peut gérer. À cette fin, vous pouvez obtenir le code source de SQLite2 (ainsi que toutes les autres versions qui y sont archivées) sur sqlite.org. Pour être plus précis, vous pouvez trouver le dernier téléchargement de la version la plus récente du code source SQLite2 au http://www.sqlite.org/cgi/src/info/47fee16ba9 afin que vous puissiez compiler le support dans votre programme C++.

L'espoir qui berce votre bateau. PS: Si ce n'est pas le problème et que vous lisez/écrivez dans les mêmes versions de SQLite, vous pouvez essayer de coder en hexadécimal les données binaires que vous essayez de stocker et de les enregistrer dans un TEXTE au lieu d'un BLOB . C'est une solution de contournement, mais cela fonctionne.