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 : 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
 
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 : 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
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.