2017-07-18 4 views
1

J'ai besoin de passer deux blobs à une procédure Oracle via un fichier PHP. Mais cela est tout à fait du mal ...Passer un BLOB à une procédure Oracle en PHP

Si je fais le prochain, il ne fonctionne pas:

$db_query = new DB_Procedure(
          "BEGIN 
          MY_PRC(  
            :p_id, 
            :p_email, 
            :p_image1, 
            :p_image2 
            ); 
          END;"); 

$param = array (
       ':p_id' => $p_id, 
       ':p_email' => $p_email, 
       ':p_image1' => $image1,  
       ':p_image2' => $image2 
       ); 

$res = $db_query->execute_query($param); 

Et il ne fonctionne de cette façon:

$db_query = new DB_Procedure(
          "BEGIN 
          MY_PRC(  
            :p_id, 
            :p_email, 
            ".$image1.", 
            ".$image2." 
            ); 
          END;"); 

$param = array (
       ':p_id' => $p_id, 
       ':p_email' => $p_email 
       ); 

$res = $db_query->execute_query($param); 

j'ai pu TÉLÉCHARGEMENT/dans les tableaux de INSERT blob cette façon:

$sql = "UPDATE MY_TABLE 
     SET b_image = empty_blob() 
     WHERE   p1 = :p1 
     AND    p2 = :p2 
     RETURNING b_image INTO :blobdata"; 

$param = array (':p1' => 'something 1', ':p2' => 'something 2'); 
$param_blob = array(":blobdata" => null); 

$db_query = new DB_Query(); 
$db_query->setQuery($sql); 

$db_query->do_query($param,OCI_ASSOC,$param_array = null,$param_blob); 

$param_blob[":blobdata"]->write($p_image); 

$db_query->db_commit(); 
$param_blob[":blobdata"]->close(); 

Mais je ne sais pas comment l'utiliser pour appeler la procédure correctement.

Répondre

1

Utilisez 'LOB temporaires'. De p 238 de The Underground PHP & Oracle Manual

$myblobid = 125; 
$myv = 'a very large amount of binary data'; 
$s = oci_parse($c, 'begin inproc(:myblobid, :myblobdata); end;'); 
$lob = oci_new_descriptor($c, OCI_D_LOB); 
oci_bind_by_name($s, ':MYBLOBID', $myblobid); 
oci_bind_by_name($s, ':MYBLOBDATA', $lob, -1, OCI_B_BLOB); 
$lob->writeTemporary($myv, OCI_TEMP_BLOB); 
oci_execute($s); 

Le manuel souterrain montre également comment obtenir LOB sur PL/SQL.