php对oracle图片数据的存储和读取
感谢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数据库存储的图片 ">
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
