2017-07-18 11 views
1

PHPプロシージャに2つのBLOBを渡す必要があります。私がすることができたPHPでBLOBをOracleプロシージャに渡す

$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); 

:しかし、これは私が次の操作を行う場合、それは動作しません...

かなり面倒です:

$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); 

そしてそれはこのように動作でもありませんUPLOAD/INSERT BLOBの表へこの方法:

$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(); 

しかし、私は正しくプロシージャを呼び出すためにこれを使用する方法がわかりません。

答えて

1

'一時LOB'を使用してください。 Pから238

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); 

地下マニュアルは、PL/SQLのうち、LOBを取得する方法を示しています。

関連する問題