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.