我這里提供一個(gè)用php操縱blob字段的例子給你,希望能有所幫助!
這個(gè)例子是把用戶上傳的圖片文件存放到blob中。
假設(shè)有一個(gè)表,結(jié)構(gòu)如下:
create table pictures (
id number,
description varchar2(100),
picture blob
);
然后是用來處理數(shù)據(jù)的php程序代碼。
〈?php
//建立oracle數(shù)據(jù)庫連接
$conn = ocilogon($user, $password, $sid);
//提交sql語句給oracle
//在這里要注意的兩點(diǎn):一是用empty_blob()函數(shù)。這是oracle的內(nèi)部函數(shù),返回一個(gè)lob的定位符。在插入lob時(shí),只能用這個(gè)辦法先生成一個(gè)空的lob定位符,然后對這個(gè)定位符進(jìn)行操作。empty_blob()函數(shù)是針對blob類型的,對應(yīng)于clob的是empty_clob()。二是returning后面的部分,把picture返回,讓php的oci函數(shù)能夠處理。
$stmt = ociparse($conn,"insert into pictures (id, description, picture)
values (pic_seq.nextval, '$description', empty_blob()) returning picture into :picture");
//生成一個(gè)本地lob對象的描述符。注意函數(shù)的第二個(gè)參數(shù):oci_d_lob,表示生成一個(gè)lob對象。其它可能的還有oci_d_file和oci_d_rowid,分別對應(yīng)于bfile和rowid對象。
$lob = ocinewdescriptor($conn, oci_d_lob);
//將生成的lob對象綁定到前面sql語句返回的定位符上。
ocibindbyname($stmt, ':picture', &$lob, -1, oci_b_blob);
ociexecute($stmt);
//向lob對象中存入數(shù)據(jù)。因?yàn)檫@里的源數(shù)據(jù)是一個(gè)文件,所以直接用lob對象的savefile()方法。lob對象的其它方法還有:save()和load(),分別用來保存和取出數(shù)據(jù)。但bfile類型只有一個(gè)方法就是save()
if($lob-〉savefile($lob_upload)){
ocicommit($conn);
echo "上傳成功〈br〉";
}else{
echo "上傳失敗〈br〉";
}
//釋放lob對象
ocifreedesc($lob);
ocifreestatement($stmt);
ocilogoff($conn);
?〉