感谢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

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

}

?>
--图片数据的读取,文件名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();

}

?>
--图片的显示

<IMG SRC="pic.php?id=36" ALT="oracle数据库存储的图片 ">