感谢http://blog.chinaunix.net/u/13284/showart_332694.html的作者和另外一名不知名作者,终于解决php对oracle图片数据的存储和读取的问题,以下代码根据其上2位作者的代码实现:
--建表
create
table
PICTURES
(
ID NUMBER ,
DESCRIPTION VARCHAR2 ( 100 ),
MIME VARCHAR2 ( 128 ),
PICTURE BLOB
)
(
ID NUMBER ,
DESCRIPTION VARCHAR2 ( 100 ),
MIME VARCHAR2 ( 128 ),
PICTURE BLOB
)
--建立sequence
create
sequence PIC_SEQ
--图片的上传及插入数据库,文件名pic_test.php
<?
php
if ( ! isset ( $_FILES [ ' lob_upload ' ] ) )
{
?>
< form action = " pic_test.php " method = " POST " enctype = " multipart/form-data " >
上传 : < input type = " file " name = " lob_upload " >< br >
< input type = " submit " value = " 提交 " >-< input type = " reset " >
</ form >
<? php
}
else
{
if ( ! isset ( $_FILES [ ' lob_upload ' ][ ' tmp_name ' ] ) || $_FILES [ ' lob_upload ' ][ ' tmp_name ' ] == "" )
{
echo " 临时文件名不存在 " ;
exit ;
}
else
{
$lob_upload = $_FILES [ ' lob_upload ' ][ ' tmp_name ' ];
$description = ' test_pic ' ;
$lob_upload_type = $_FILES [ ' lob_upload ' ][ ' type ' ];
}
$user = '' ; // 用户名,自行修改
$password = '' ; // 口令,自行修改
$db = '' ; // 数据库sid,自行修改
$conn = ocilogon( $user , $password , $db );
$stmt = ociparse( $conn , " INSERT INTO PICTURES ( id, description, mime, picture )
VALUES ( pic_seq.NEXTVAL, '$description', '$lob_upload_type', EMPTY_BLOB( ) ) RETURNING picture INTO :PICTURE " );
$lob = ocinewdescriptor( $conn , OCI_D_LOB );
OCIBindByName( $stmt , ' :PICTURE ' , & $lob , - 1 , OCI_B_BLOB );
OCIExecute( $stmt , OCI_DEFAULT );
if ( $lob -> savefile( $lob_upload ) )
{
OCICommit( $conn );
echo " 上传成功<br> " ;
}
else
{
echo " 上传失败<br> " ;
}
OCIFreeDesc( $lob );
OCIFreeStatement( $stmt );
OCILogoff( $conn );
}
?>
if ( ! isset ( $_FILES [ ' lob_upload ' ] ) )
{
?>
< form action = " pic_test.php " method = " POST " enctype = " multipart/form-data " >
上传 : < input type = " file " name = " lob_upload " >< br >
< input type = " submit " value = " 提交 " >-< input type = " reset " >
</ form >
<? php
}
else
{
if ( ! isset ( $_FILES [ ' lob_upload ' ][ ' tmp_name ' ] ) || $_FILES [ ' lob_upload ' ][ ' tmp_name ' ] == "" )
{
echo " 临时文件名不存在 " ;
exit ;
}
else
{
$lob_upload = $_FILES [ ' lob_upload ' ][ ' tmp_name ' ];
$description = ' test_pic ' ;
$lob_upload_type = $_FILES [ ' lob_upload ' ][ ' type ' ];
}
$user = '' ; // 用户名,自行修改
$password = '' ; // 口令,自行修改
$db = '' ; // 数据库sid,自行修改
$conn = ocilogon( $user , $password , $db );
$stmt = ociparse( $conn , " INSERT INTO PICTURES ( id, description, mime, picture )
VALUES ( pic_seq.NEXTVAL, '$description', '$lob_upload_type', EMPTY_BLOB( ) ) RETURNING picture INTO :PICTURE " );
$lob = ocinewdescriptor( $conn , OCI_D_LOB );
OCIBindByName( $stmt , ' :PICTURE ' , & $lob , - 1 , OCI_B_BLOB );
OCIExecute( $stmt , OCI_DEFAULT );
if ( $lob -> savefile( $lob_upload ) )
{
OCICommit( $conn );
echo " 上传成功<br> " ;
}
else
{
echo " 上传失败<br> " ;
}
OCIFreeDesc( $lob );
OCIFreeStatement( $stmt );
OCILogoff( $conn );
}
?>
--图片数据的读取,文件名pic.php
<?
$user = '' ; // 用户名,自行修改
$password = '' ; // 口令,自行修改
$db = '' ; // 数据库sid,自行修改
$pictureid = $_REQUEST [ ' id ' ];
$conn = ocilogon( $user , $password , $db );
$stmt = OCIParse( $conn , " SELECT * FROM PICTURES WHERE ID = $pictureid " );
OCIExecute( $stmt );
if ( OCIFetchInto( $stmt , $result ) )
{
Header ( " Content-type: " . $result [ 0 ]);
echo $result [ 3 ] -> load();
}
?>
$user = '' ; // 用户名,自行修改
$password = '' ; // 口令,自行修改
$db = '' ; // 数据库sid,自行修改
$pictureid = $_REQUEST [ ' id ' ];
$conn = ocilogon( $user , $password , $db );
$stmt = OCIParse( $conn , " SELECT * FROM PICTURES WHERE ID = $pictureid " );
OCIExecute( $stmt );
if ( OCIFetchInto( $stmt , $result ) )
{
Header ( " Content-type: " . $result [ 0 ]);
echo $result [ 3 ] -> load();
}
?>
--图片的显示
<
IMG SRC
=
"
pic.php?id=36
"
ALT
=
"
oracle数据库存储的图片
"
>