Bonjour,
Je suis en cours de réalisation d'une application pour laquelle certaines des tables contiennent plusieurs BLOB.
En fait, je l'avais écrite avec PostgreSQL en cible, mais il faudrait que ça fonctionne avec les 2. J'ai rendu l'appli (assez) portable, mais je bloque sur un point.
Je vous passe la galère d'insertion de BLOB ou CLOB dans ORACLE avec PHP/PDO, alors que c'est si naturel avec postgresql...
Ca va encore quand il n'y a qu'un seul BLOB, je fait:
et ça fonctionne.
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
26
27
28
29
30
31
32
33 <?php // .... $message = 'plop'; // exemple $cnx = $this->_hcnx->handle(); // un handle de connexion PDO fourni par la classe de connexion if ($this->_hcnx->get_driver() == "ORACLE" ) { $qry = " update pp_traitement" ." set" ." trt_nombre_traites=:nbre" ." ,trt_termine='Y'" ." ,trt_ts_fin=CURRENT_TIMESTAMP" ." ,trt_commentaire=EMPTY_BLOB()" // --- ça c'est un CLOB ou plutot un BLOB, cf. ci-dessous ." where" ." trt_id=:trt_id" ." RETURNING trt_commentaire INTO :com" ; $cnx->beginTransaction(); $sth = $cnx->prepare($qry, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); $sth->bindValue(':trt_id', $this->_id_traitement); $sth->bindValue(':nbre', $lignes); $clob = null; $sth->bindParam(':com', $clob, PDO::PARAM_LOB); $sth->execute(); fwrite( $clob, nl2br($message)); // par exemple fclose( $clob ); $cnx->commit(); } // .... ?>
Bon, je trouve ça bien lourd et j'ai été obligé de déclarer les colonnes en BLOB alors que ce sont des CLOB (sinon message d'erreur) mais passons. Le problème est quand j'ai deux colonnes ou plus en BLOB dans la même table (par exemple une image et un grand commentaire).
je ne vois pas comment gérer la partie de la requete :
étant donné que je ne peux retourner qu'une valeur (enfin sous cette forme, je suppose).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <?php ." RETURNING trt_commentaire INTO :com" ?>
L'un d'entre vous a-t-il été confronté à ce problème ? A-t-il une solution ?
Merci.
Partager