2016-04-16 15 views
0

PHPを使用してBLOBデータをアップロードしようとしているOracleデータベースがあります。アップロード用に単純なHTMLフォームとPHPページを作成しました。 DataGrip(SQLDeveloperに似ています)を使用してテーブルのデータをチェックし、アップロードした画像をダウンロードしたときにMacに表示されず、16進エディタで画像を見ると全く異なります。これの原因は何でしょうか?データベースのBLOBにデータを挿入すると、余分なデータがロードされる

<?php 

    /* 
     CREATE TABLE BLOBTABLE 
     (
      identifier number, 
      filename VARCHAR2(100), 
      picture blob 
     ); 

     CREATE OR REPLACE PROCEDURE InsertBlob(pID NUMBER, pName VARCHAR2, pPicture BLOB) AS 
     begin 
      INSERT INTO BlobTable (id, name, picture) VALUES (pID, pName, pPicture); 
      exception 
      when others then 
      RAISE_APPLICATION_ERROR(-20000, sqlerrm); 
     end; 
    */ 
    define('DB_USER','AAA'); 
    define('DB_PSWD','KKK'); 
    define('DB_CONN_STR','QQQ'); 
    define('DB_CHARSET','AL32UTF8'); 

    $conn=oci_connect(DB_USER,DB_PSWD,DB_CONN_STR,DB_CHARSET); 
    $stmt=oci_parse($conn,'BEGIN InsertBlob(:pIdentifier,:pFileName,:pContent); END;'); 
    // prepare variables 
    $identifier =111; 
    $filename =$_FILES['file']['name']; 
    $tmp_filename=$_FILES['file']['tmp_name']; 
    // bind primitive parameters 
    oci_bind_by_name($stmt,':pIdentifier',$identifier); 
    oci_bind_by_name($stmt,':pFileName',$filename); 
    // bind blob parameter 
    $blob=oci_new_descriptor($conn,OCI_DTYPE_LOB); 
    oci_bind_by_name($stmt,':pContent',$blob,-1,OCI_B_BLOB); 
    $bres=$blob->writetemporary(file_get_contents($tmp_filename)); 
    // execute statement and commit changes 
    // specify OCI_NO_AUTO_COMMIT, otherwise you may get INVALID_OCI_HANDLE exception 
    $res=oci_execute($stmt,OCI_NO_AUTO_COMMIT); 
    oci_commit($conn); 
    // free resources and close connection 
    $blob->free(); 
    if (!$res) 
    { 
     $e = oci_error($query); 
     echo $e['message']; 
    } 
    oci_free_statement($stmt); 
    oci_close($conn); 
?> 
+0

にする必要が$ BRESに割り当てる行が判明します –

答えて

0

は、私はPHP 7を使用し、AWSでRHEL 7、上で実行しています

$bres=$blob->writetemporary(file_get_contents($tmp_filename),OCI_TEMP_BLOB); 
関連する問題