[Résolu] Afficher image d'une BDD avec PHP PDO

Afficher image d'une BDD avec PHP PDO [Résolu] - PHP - Programmation

Marsh Posté le 27-06-2011 à 10:53:20    

Bonjour,
 
je souhaiterai afficher une image que je stocke dans une base de données MySQL avec PHP PDO, voici mon code :
 

Code :
  1. $serveur = "localhost";
  2. $base = "bddtest";
  3. $login = "test";
  4. $password = "test";
  5. $connectstring_temp = 'mysql:host='.$serveur.';dbname='.$base;
  6. $dbh_temp = new PDO($connectstring_temp, $login, $password);
  7. $sql = "SELECT doc FROM test WHERE id=1";
  8. $query = $dbh_temp->prepare($sql);
  9. $query->execute();
  10. $query->bindColumn("doc", $image, PDO::PARAM_LOB);
  11. $query->fetch(PDO::FETCH_BOUND);
  12. header("Content-Type: image" );
  13. echo ($image);


 
Le problème, c'est que cela n'affiche as l'image mais son code binaire, dont voici un extrait :

Code :
  1. ���}!1AQa"q2���#B��R��$3br� %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz��������������������������������������������������������������������������� ���w!1AQaq"2�B���� #3R�br� $4�%�


 
A noter que je ne souhaite pas stocker les images dans un répertoire et le chemin dans ma BDD car il s'agit d'un site web qui sera administré à distance par un client lourd (et je n'ai qu'une image à stocker).
 
Avez-vous une idée du problème ?
 
Par avance merci.
Léo


Message édité par leo62 le 27-06-2011 à 14:11:20
Reply

Marsh Posté le 27-06-2011 à 10:53:20   

Reply

Marsh Posté le 27-06-2011 à 12:13:03    

Les octets de l'image semblent être bien récupéré, et donc, ce ne semble pas être un problème dû au Select et à PDO, mais ce serait plutôt un problème de traitement de ces octets.
 
Le header n'a pas l'air correct, car il manque le type de l'image.
 
Dans la page de PHP à propos de la fonction header(), http://fr.php.net/manual/fr/function.header.php ,
il y a un exemple d'affichage d'image :

<?php
ob_start();
// assuming you have image data in $imagedata
$length = strlen($imagedata);
header('Last-Modified: '.date('r'));
header('Accept-Ranges: bytes');
header('Content-Length: '.$length);
header('Content-Type: image/jpeg');
print($imagedata);
ob_end_flush();
?>

Reply

Marsh Posté le 27-06-2011 à 12:55:43    

Salut, et merci :)
 
Dès que je précise :
header("Content-Type: image/jpeg" );
 
J'ai le message :
L'image “http://127.0.0.1:8888/Workspace/test.php” ne peut être affichée car elle contient des erreurs.
 
Et ce même en rajoutant toutes les autres lignes du code que tu m'as donné :s

Reply

Marsh Posté le 27-06-2011 à 14:10:44    

Bon, au final je suis passé par une autre méthode qui fonctionne, je met le code au cas où ça puisse aider quelqu'un un jour :
 

Code :
  1. <?php
  2. //  configuration
  3. $dbtype  = "mysql";
  4. $dbhost  = "localhost";
  5. $dbname  = "bddtest";
  6. $dbuser  = "test";
  7. $dbpass  = "test";
  8. //  database connection
  9. $conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);
  10. // query
  11. $sql = "SELECT id, fichier FROM test WHERE id = 1";
  12. $q = $conn->prepare($sql);
  13. $q->execute();
  14. $q->bindColumn(1, $id);
  15. $q->bindColumn(2, $cover, PDO::PARAM_LOB);
  16. while($q->fetch())
  17. {
  18.  file_put_contents($id.".jpg",$cover);
  19.  echo "<img src='".$id.".jpg'> <br/>";
  20. }
  21. ?>


 
Mes données sont dans une table TEST(id, fichier) où id est un entier et fichier un longblob qui contient l'image
 
Encore merci et @bientôt.


Message édité par leo62 le 27-06-2011 à 14:11:02
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed