affichage blob jpeg oracle

Petit nouveau ! | 5 Messages

06 févr. 2007, 23:50

Salut

J'avais fait tourner en son temps sur une base de test un script php4 nommé affimg2.php, extrayant une image stockée en interne dans un blob oracle 8. Le code :
<?
$connection = OCILogon ("scott","tiger","emp");
$requete = "select img from image where cle=1";
$moncursor = OCIParse ($connection, $requete);
$result=OCIExecute($moncursor);
$result=OCIFetchinto($moncursor,&$enreg);
header("Content-type: image/jpg");
echo $enreg[0]->load();
$c2=ocilogoff($connection);
?>
Et ça marchait très bien. Je viens de retester ce code et j'obtiens comme affichage :

http://localhost/affimg2.php

et rien d'autre. J'ai fait afficher le source, et j'obtiens :
<br />
<b>Fatal error</b>: Call to a member function on a non-object in <b>/usr/local/apache2/htdocs/affimg2.php</b> on line <b>8</b><br />
Désolé, mais là, je cale.

Une piste svp?

Merci

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

06 févr. 2007, 23:54

Modération :
amorer, afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

06 févr. 2007, 23:57

Salut,

Ton lien est en local :?

Sinon le message te dis que tu essaie d'appliquer une méthode (load()) sur une variable ($enreg[0]) qui n'est pas un objet.

Elle correspond à quoi cette ligne :
echo $enreg[0]->load(); 

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Petit nouveau ! | 5 Messages

07 févr. 2007, 00:05

La ligne
echo $enreg[0]->load();
correspond à ce que j'en ai compris, au chargement de l'objet depuis la base et à son envoi à la page html.

Je ne comprend pas le message d'erreur que je n'ai jamais eu : j'ai déjà fait fonctionné ce code.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

07 févr. 2007, 22:30

Je ne comprend pas le message d'erreur que je n'ai jamais eu : j'ai déjà fait fonctionné ce code.
Sinon le message te dis que tu essaie d'appliquer une méthode (load()) sur une variable ($enreg[0]) qui n'est pas un objet.
Et doù elle sort cette variable "$enreg" ?

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Petit nouveau ! | 5 Messages

08 févr. 2007, 20:37

Je ne comprend pas le message d'erreur que je n'ai jamais eu : j'ai déjà fait fonctionné ce code.
Sinon le message te dis que tu essaie d'appliquer une méthode (load()) sur une variable ($enreg[0]) qui n'est pas un objet.
Et doù elle sort cette variable "$enreg" ?
Salut

Si j'en crois la doc php :
----------------------------------------------
int ocifetchinto (int stmt, array &result [, int mode])
ocifetchinto() retourne la ligne suivante (pour une commande SELECT) dans le tableau result. ocifetchinto() écrasera le contenu de result. Par défaut, result sera un tableau à index numérique, commencant à 1
----------------------------------------------

C'est donc mon tableau récepteur du fetch.
PHP a-t-il évolué sur ce point? Pourquoi attend-on un objet là où il est indiqué un tableau.

Je ne veux pas être trop lourd, mais je répète que j'ai déjà fait fonctionner ce code quelques dizaines de fois depuis 4-5 ans, sans pb. Et là tout d'un coup, je ne vois vraiment pas dans quoi je vais pouvoir récupérer mon blob pour l'envoyer à la page html :-(

Merci pour l'aide éventuelle.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

08 févr. 2007, 21:10

Comme tu le dit, ocifetchinto() retourne un tableau, pas un objet.

Tu ne peux donc pas faire $enre[0]->... sur un tableau, surtout que ça m'étonnerais que le contenu d'une base soit une instance d'un objet :D

si tu fait un print_r($enre);, tu devrais arriver à voir ce que tu peut récupérer dans ce tableau ;)

PS : au fait, cette fonction est dépréciée ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Petit nouveau ! | 5 Messages

09 févr. 2007, 08:55

Comme tu le dit, ocifetchinto() retourne un tableau, pas un objet.

Tu ne peux donc pas faire $enre[0]->... sur un tableau, surtout que ça m'étonnerais que le contenu d'une base soit une instance d'un objet :D

si tu fait un print_r($enre);, tu devrais arriver à voir ce que tu peut récupérer dans ce tableau ;)

Le pb est que le contenu de $enre[0] est une image jpeg. Et que je n'obtiens comme affichage que l'url (locale) du script!

PS : au fait, cette fonction est dépréciée ;)
Elle est peut-être dépréciée, mais elle marche avec un code qui me ramène des lignes de texte.
Je vais chercher par quoi elle est remplacée, je teste et je reviens.

Merci