Page 1 sur 1

lire une donnée stockée dans BLOB

Posté : 13 oct. 2015, 11:58
par tom_nameless
Bonjour,

Mon CMS stock des url dans un champ blob.

Pour x raison, j'aimerais faire une requête pour lire cette donnée et l'afficher dans mon site.
Problème je n'arrive pas à afficher la donnée (qui est binaire si j'ai bien compris) !

Comment procéder ? je ne trouve pas d'info sur internet à ce sujet..

Merci de votre aide

Re: lire une donnée stockée dans BLOB

Posté : 13 oct. 2015, 12:46
par yann18
bonjour,
avec la fonction CONVERT( ) de mysql tu peux passer du blob au string.

Code : Tout sélectionner

SELECT CONVERT(colonne_en_blob USING utf8) donnee_convertie FROM LA_TABLE;

Re: lire une donnée stockée dans BLOB

Posté : 13 oct. 2015, 14:29
par tom_nameless
Merci pour cette astuce.
Par contre dans ma requête je n'ai pas qu'une seule colonne.... donc ça risque de ne pas marcher dans mon cas

J'ai fait un test sur une seule colonne (blob) et étrangement j'ai juste un id...
Je ne m'attendais pas à avoir juste ça.
Sur certain enregistrement j'ai rien... alors que le champ est obligatoirement renseigné puisque cette colonne sert à enregistrer l'url d'un fichier !

Bizarre...

Re: lire une donnée stockée dans BLOB

Posté : 13 oct. 2015, 15:03
par yann18
Par contre dans ma requête je n'ai pas qu'une seule colonne.... donc ça risque de ne pas marcher dans mon cas
c'est une requête SQL donc tu peux sélectionner plusieurs colonnes de ta table.
$sql = "SELECT CONVERT(url USING utf8)  AS url_convertie, col1, col2, ...,coln FROM LA_TABLE";

Re: lire une donnée stockée dans BLOB

Posté : 13 oct. 2015, 15:48
par tom_nameless
Ok merci yann18 ,

Le résultat obtenu ne correspond pas à l'oragnisation de la bdd du CMS !

J'ai un id '9' qui ne correspond pas du tout la l'id de ma table "file" !?

Je suis perdu !

est-il possible que ça soit un tableau ? ou autre choses ?

Re: lire une donnée stockée dans BLOB

Posté : 14 oct. 2015, 11:50
par yann18
normalement tu peux insérer du texte dans un champ de type BLOB (ce qui est probablement le cas pour ton url) et en retour afficher du texte.
Cependant d'après ton descriptif il me semble que t'as dû insérer l'image ce qui expliquerait la présence du binaire. si tel est le cas, pour afficher l'image tu dois la décoder en base64

Re: lire une donnée stockée dans BLOB

Posté : 15 oct. 2015, 15:58
par tom_nameless
Je pense que c'est un tableau... car j'ai trouvé une table qui contient les éléments pdf.
Mais l'id ne correspond pas au bon fichier.

Je me demande donc si ce n'est pas un tableau mais je n'arrive pas à lire les différentes données
"SELECT CONVERT(file USING utf8) fileutf8......'
echo "File : ". $file = $data['fileutf8'];
ce qui affiche : File : 9
Possible que ça soit un tableau avec 9 colonnes ?
Car je me répète mais le 9 ne correspond à rien dans ma table "files"

Comment savoir si c'est un tableau ? je devrais avec un 'array' qui s'affiche logiquement ?

Re: lire une donnée stockée dans BLOB

Posté : 16 oct. 2015, 11:47
par yann18
Je pense que c'est un tableau... car j'ai trouvé une table qui contient les éléments pdf.
le résultat de l'exécution d'une requête de sélection (SELECT) est toujours sous forme de tableau et ce quel que ce soit le le type de champ devant être extrait.

Pour lire tes fichiers pdf stockés en base:
-tu dois exécuter la requête sélectionnant qu'un seul fichier c-a-d sélectionner le fichier dont l'id x
-Récupérer le resultat de ta requête (avec fech() pour PDO ou mysqli_fetch_assoc par exemple)
-Encoder le fichier en base 64
-Décoder le fichier en base 64(uniquement pour le fichier pdf)
-Envoyer au navigateur le type de fichier(avec header('Content-type: application/pdf')
) dont on veux lire.
Par exemple on souhaite lire le fichier ayant pour id 100:
//on suppose que la connexion avec la BD a été initialisée avec new PDO(...)
$id = 100;
 $stmt = $dbh->prepare("select id, url  from la_table where id=:id ");
$dbh =null;
$rep= $stmt->execute( [ 'id'=> $id ]);
 $row = $stmt->fetch();
$base64 = base64_encode($r['url']);
$file = base64_decode($base64);
 header('Content-type: application/pdf');
 header('Content-Disposition: inline; filename="' . $file . '"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
  header('Pragma: public');
  echo $file;
   exit;
Voilà tu as tout ce qu'il te faut pour lire un fichier pdf.

Pour savoir le type et le contenu des données récupérées, tu peux utiliser la fonction var_dump