Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/06/2011, 19h44   #1
Invité de passage
 
Étudiant
Inscription : mars 2011
Messages : 12
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mars 2011
Messages : 12
Points : 4
Points : 4
Par défaut Stream, BLOBs et Postgresql

Bonsoir,
Je suis en train de tester PostgreSQL avec PHP en utilisant le stockage d’image dans la base de données.
Pour cela j’utilise l’interface PDO pour PostgreSQL, mais je n’arrive pas à récupérer mes champs de type BLOBs (à travers un type oid) ça me retourne que des flux vide (pas nul).
Je précise qu'en utilisant pgAdmin j'arrive tout à fait à récupérer mes champs et à les sauvegarder en fichiers.
Voici mon code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
try {
    $pdo = new PDO($db_dns);
    $sql = "select med_stockage, tym_label from media where tym_label = 'jpg'";
    $tuples = $pdo->query($sql);
    $tuple = $tuples->fetch(PDO::FETCH_ASSOC);  
    $rawimage = $pdo->pgsqlLOBOpen($tuple['med_stockage']);
    if($rawimage != false) {
        // header('Content-type: image/' . $tuple['tym_label']);
        if(!fpassthru($rawimage))
             print 'Erreur fpassthru()';
    } else 
        print 'Erreur pgsqlLOBOpen()';
} catch(PDOException $e) {
    print_r($e->getMessage() . '<br />' . $e->getTraceAsString());
}
Édit: le problème est sensiblement le même en utilisant "l'ancienne" interface.
Édit2: J'ai aussi essayé en suivant le modèle de la documentation PDO :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
try {
    $co = new PDO($db_dns);
    $co->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $co->beginTransaction();
 
    $sql = "select med_stockage, tym_label from media where tym_label = ?";
    $st = $co->prepare($sql);
 
    $st->bindColumn('med_stockage', $largeObject, PDO::PARAM_LOB);
    $st->bindColumn('tym_label', $type, PDO::PARAM_STR);
 
    if($st->execute(array('jpg'))) {  
        $tuple = $st->fetch(PDO::FETCH_BOUND); 
 
        // header('Content-type: image/' . $type);
 
        if(fpassthru($largeObject) === false) 
            print 'Erreur fpassthru()';
    } else 
        print 'Erreur PDO->execute()';
    $co->commit();
} catch(PDOException $e) {
    print_r($e->getMessage() . '<br />' . $e->getTraceAsString());
}
Merci d'avance pour vos réponses.
atsig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 14h30   #2
Invité de passage
 
Étudiant
Inscription : mars 2011
Messages : 12
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mars 2011
Messages : 12
Points : 4
Points : 4
Bonjour,
Est-ce qu'un modérateur pourrait déplacer mon message dans la section PHP & PostgreSQL ?
J'ai finalement trouvé le dysfonctionnement, j'avais fait des tests uniquement sur des images insérées dans la base par le super utilisateur (le seul pouvant directement le faire en SQL). De ce fait les images étaient la propriété du super utilisateur donc impossible de lire avec un autre utilisateur sans rectifier les droits; une erreur bête .


Merci d'avance.
atsig est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h37.


 
 
 
 
Partenaires

Hébergement Web