ocinewdescriptor

(PHP 3>= 3.0.7, PHP 4 , PHP 5)

ocinewdescriptor -- Initialise un nouveau pointeur vide de LOB/FILE

Description

object ocinewdescriptor ( resource connection [, int type])

ocinewdescriptor() alloue l'espace nécessaire pour stocker un descripteur, ou un pointeur de LOB sur la connexion connection. Les valeurs acceptées pour type sont OCI_D_FILE, OCI_D_LOB et OCI_D_ROWID. Pour les pointeurs de LOB, les méthodes load, save, et savefile sont associées avec le pointeur. Pour les pointeurs de type BFILE, seule la méthode load existe. Voyez le second exemple pour une illustration.

Exemple 1. Exemple avec ocinewdescriptor()

<?php   
    
/* Ce script est fait pour être appelé dans un formulaire HTML
     * Il attends les variables $user, $password, $table, $where, et $commitsize
     * Le script efface alors les lignes sélectionnées avec ROWID et valide
     * l'effacement après chaque groupe de $commitsize lignes.
     * (Utilisez avec prudence, car il n'y a pas d'annulation possible).
     */
    
$conn = OCILogon($user, $password);
    
$stmt = OCIParse($conn,"select rowid from $table $where");
    
$rowid = OCINewDescriptor($conn,OCI_D_ROWID);
    
OCIDefineByName($stmt,"ROWID",&$rowid);   
    
OCIExecute($stmt);
    while (
OCIFetch($stmt) ) {      
       
$nrows = OCIRowCount($stmt);
       
$delete = OCIParse($conn,"delete from $table where ROWID = :rid");
       
OCIBindByName($delete,":rid",&$rowid,-1,OCI_B_ROWID);
       
OCIExecute($delete);      
       print
"$nrows\n";
       if ( (
$nrows % $commitsize) == 0 ) {
           
OCICommit($conn);      
       }   
    }
    
$nrows = OCIRowCount($stmt);   
    print
"$nrows deleted...\n";
    
OCIFreeStatement($stmt);  
    
OCILogoff($conn);
?>
<?php
    
/* Ce script est fait pour être appelé depuis un formulaire HTML.
     * Il attends les variables $user, $password, $table, $where, et $commitsize,
     * données par le formulaire. Le script efface
     * les lignes sélectionnées avec ROWID est valide les transactions
     * à chaque jeu de $commitsize lignes. (Attention : il n'y plus d'annulation) */
  
if(!isset($lob_upload) || $lob_upload == 'none'){
?>
<form action="upload.php" method="post" enctype="multipart/form-data">
Fichier à télécharger : <input type="file" name="lob_upload"><br>
<input type="submit" value="Envoyer"> - <input type="reset">
</form>
<?php
  
} else {

     
// $lob_upload contient le nom temporaire du fichier téléchargé

     // voir aussi la section fonctionnalités sur les téléchargements de
     // fichiers si vous voulez utiliser des téléchargements sécurisés
     
     
$conn = OCILogon($user, $password);
     
$lob = OCINewDescriptor($conn, OCI_D_LOB);
     
$stmt = OCIParse($conn,"insert into $table (id, the_blob)
               values(my_seq.NEXTVAL, EMPTY_BLOB()) returning the_blob into :the_blob"
);
     
OCIBindByName($stmt, ':the_blob', &$lob, -1, OCI_B_BLOB);
     
OCIExecute($stmt, OCI_DEFAULT);
     if(
$lob->savefile($lob_upload)){
        
OCICommit($conn);
        echo
"Blob bien téléchargé\n";
     }else{
        echo
"Impossible de télécharger le Blob\n";
     }
     
OCIFreeDesc($lob);
     
OCIFreeStatement($stmt);
     
OCILogoff($conn);
  }
?>

Exemple 2. Exemple avec ocinewdescriptor()

<?php   
    /* Appel d'une procédure PL/SQL stockée qui prend un clobs
     * en entrée (PHP 4 >= 4.0.6). 
     * Exemple de signateure de procédure stockée PL/SQL :
     *
     * PROCEDURE save_data
     *   Nom de l'argument              Type                    In/Out Default?
     *   ------------------------------ ----------------------- ------ --------
     *   KEY                            NUMBER(38)              IN
     *   DATA                           CLOB                    IN
     *
     */

    $conn = OCILogon($user, $password);
    $stmt = OCIParse($conn, "begin save_data(:key, :data); end;");
    $clob = OCINewDescriptor($conn, OCI_D_LOB);
    OCIBindByName($stmt, ':key', $key);
    OCIBindByName($stmt, ':data', $clob, -1, OCI_B_CLOB);
    $clob->WriteTemporary($data);
    OCIExecute($stmt, OCI_DEFAULT);
    OCICommit($conn);
    $clob->close();
    $clob->free();
    OCIFreeStatement($stmt);
?>

Note : Cette fonction a été renommée en oci_new_descriptor() pour PHP version 5.0.0 et plus récent. Pour la compatibilité ascendante, ocinewdescriptor() peut toujours être utilisée. Toutefois, elle est obsolète.