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 :
Édit: le problème est sensiblement le même en utilisant "l'ancienne" interface.
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()); }
Édit2: J'ai aussi essayé en suivant le modèle de la documentation PDO :
Merci d'avance pour vos réponses.
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()); }
Partager