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);
?>
にする必要が$ BRESに割り当てる行が判明します –