IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Afficher image d'une BDD avec PHP PDO [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 15
    Points : 13
    Points
    13
    Par défaut Afficher image d'une BDD avec PHP PDO
    Bonjour,

    je souhaiterai afficher une image que je stocke dans une base de données MySQL avec PHP PDO, voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        $serveur = "localhost";
        $base = "bddtest";
        $login = "test";
        $password = "test";
        $connectstring_temp = 'mysql:host='.$serveur.';dbname='.$base;
        $dbh_temp = new PDO($connectstring_temp, $login, $password);
        $sql = "SELECT doc FROM test WHERE id=1";
        $query = $dbh_temp->prepare($sql);
        $query->execute();
        $query->bindColumn("doc", $image, PDO::PARAM_LOB);
        $query->fetch(PDO::FETCH_BOUND);
        header("Content-Type: image" );
        echo ($image);

    Le problème, c'est que cela n'affiche as l'image mais son code binaire, dont voici un extrait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        ���}!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

  2. #2
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Il faudrait peut être définir le type d'image en question dans le content-type.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Content-Type: image/jpg');
    Sinon, on peut passer par cette méthode
    - http://www.phpeveryday.com/articles/...LOBs-P554.html

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    Salut, et merci,

    quand je précise le type d'images, 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.

    Je vais essayer ton autre méthode et je te tiens au courant

  4. #4
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Tu as tout un tas de $#xxx; dans ton code binaire. Ce sont des caractères HTML, ce n'est pas normal. Appliques-tu une règle de transformation en entrée ou en sortie de ton champ blob ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    Non je n'applique aucune transformation a mon blob (qui est d'ailleurs un LONGBLOB dans ma BDD.

    En mettant juste le code PHP comme mis plus haut, j'ai toujours la même erreur...

    Mais je vais essayer l'autre méthode, car comme à terme il faudra que j'intègre mon code PHP dans un page html (qui contient l'entete, les menus...), la méthode actuelle n'est peut-être pas très appropriée ?

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    Voila, ça fonctionne merci bien.

    Je donne le code au cas où cela puisse aider quelqu'un.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    // 	configuration
    	$dbtype		= "mysql";
    	$dbhost 	= "localhost";
    	$dbname		= "bddtest";
    	$dbuser		= "test";
    	$dbpass		= "test";
     
    	// 	database connection
    	$conn = new PDO("mysql:host=$dbhost;     dbname=$dbname",$dbuser,$dbpass);
     
    	// query
    	$sql = "SELECT id, fichier FROM test WHERE id = 1";
    	$q = $conn->prepare($sql);
    	$q->execute();
     
    	$q->bindColumn(1, $id);
    	$q->bindColumn(2, $cover, PDO::PARAM_LOB);
     
    	while($q->fetch())
    	{
    		file_put_contents($id.".jpg",$cover);
    		echo "<img src='".$id.".jpg'> <br/>";
    	}
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/02/2011, 02h43
  2. [MySQL] Afficher une IMAGE dans une BDD via PHP
    Par lothar59 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 07/01/2011, 15h17
  3. affiger image d'une bdd avec php
    Par madmax57 dans le forum Langage
    Réponses: 10
    Dernier message: 16/07/2008, 16h07
  4. Comment extraire du xml pour faire une bdd avec php?
    Par baleiney dans le forum XQUERY/SGBD
    Réponses: 9
    Dernier message: 09/03/2008, 14h55
  5. [PostgreSQL] [PostGreSQL] Création d'une bdd avec PHP
    Par damien150 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 09/03/2007, 16h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo