long은 아니고 blob 예제입니다. 저는 pro*c로 blob 처리하는것 하려는데 정말로 안되네요. 쩝~
출처 : http://oops.org/SERVICE/jsboard/read.php?table=jsboard_oopsFAQ&no=45
2. LOB data 를 INSERT 할 경우
content 라는 blob filed에 $text 를 입력할 경우
<?
# blob에 넣을 내용. 만약 image file을 넣으려고 할때에는
# $text = addslashes($file_char)"; 의 형식으로 지정해야함
$text = "BLOB에 넣을 내용";
# DB 접속 TS -> table space
$oci[con] = OCILogon(TS,passwd,sid);
# 새로운 빈 descriptor LOB/FILE (LOB가 default)를 초기화
$lob = OCINewDescriptor($oci[con],OCI_D_LOB);
# :article 이라는 호스트변수선언
# blob filed에는 EMPTY_BLOB()를 지정하여 먼저 비워 놓는다.
$oci[sql] = "INSERT INTO tdoc (id,newsn,title,mid,miid,date,wdate,content)
VALUES ($id,$nno,'$title','$majors','$minors',
to_date('$pdate','YYYY.MM.DD'),
to_date('$wdate','YYYY.MM.DD HH:MI:SS'),EMPTY_BLOB())
return content into :article";
$oci[que] = OCIParse($oci[con],$oci[sql]);
# 선언된 호스트변수와 $lob를 바인딩
OCIBindByName($oci[que],":article",&$lob,-1,OCI_B_BLOB);
OCIExecute($oci[que],OCI_DEFAULT);
# 바인딩 되어진 $lob 변수에 BLOB에 들어갈 내용을 삽입.
$lob->save($text);
$lob->free();
OCICommit($oci[con]);
OCIFreeStatement($oci[que]);
OCILogOff($oci[con]);
?>
3. LOB data 를 UPDATE 할 경우
이번 예는 image를 가지고 하는 것으로 해 보지요. :-)
img 라는 blob filed에 $pimg 라는 image 내용을 update
INSERT 와 별 차이는 없습니다. LOB data를 UPDATE 하는 예제를 찾기가
정말 힘들더군요. 그래서 무조건 해 봤는데 INSERT랑 동일하게 하니 되
더군요 :-)
<?
# 사진 파일 내용을 읽어 변수로 받음
# 주의 : MySQL에서 image를 binary로 읽어서 입력을 할 경우에는
# addslashes() 함수를 이용하여 '"\ 와 같은 문자들을
# 감싸줘야 했으나 Oracle에서는 이를 하지 않아야 한다.
#
$fp = fopen("$img_dir/$f[$i]","r");
$pimg = fread($fp,filesize("$img_dir/$f[$i]"));
fclose($fp);
# DB 접속 TS -> table space
$oci[con] = OCILogon(TS,passwd,sid);
# 새로운 빈 descriptor LOB/FILE (LOB가 default)를 초기화
$lob = OCINewDescriptor($oci[con],OCI_D_LOB);
# :article 이라는 호스트변수선언
# blob filed에는 EMPTY_BLOB()를 지정하여 먼저 비워 놓는다.
$oci[sql] = "UPDATE tdoc SET isimg='1',rsvd='0',img=EMPTY_BLOB()
WHERE id=$id
return image into :image";
$oci[que] = OCIParse($oci[con],$oci[sql]);
# 선언된 호스트변수와 $lob를 바인딩
OCIBindByName($oci[que],":image",&$lob,-1,OCI_B_BLOB);
OCIExecute($oci[que],OCI_DEFAULT);
# 바인딩 되어진 $lob 변수에 BLOB에 들어갈 내용을 삽입.
$lob->save($pimg);
$lob->free();
OCICommit($oci[con]);
OCIFreeStatement($oci[que]);
OCILogOff($oci[con]);
?>
출처 : http://oops.org/SERVICE/jsboard/read.php?table=jsboard_oopsFAQ&no=42
2-2. LOB data를 사용할 경우
http://technet.oracle.co.kr/isp/plsql/kaesipan_query?seqno=20000425163857 참조할것.
<?
$con = OCILogon("USER","PASSWD","SID");
$sql = "SELECT title, content FROM tdoc WHERE id = $id";
$que = OCIParse($con,$sql);
OCIDefineByName($que,"CONTENT",&$cont);
OCIDefineByName($que,"TITLE",&$title);
OCIExecute($que,OCI_DEFAULT);
OCIFetch($que);
# LOB data는 Object를 다음과 같이 풀어 줘야 한다.
$content = $cont->load();
echo "
$no . $title<br>\n
<p>
<pre>\n$content\n</pre>";
OCIFreeStatement($que);
OCILogoff($con);
?>
2-3 Image data가 DB안에 있을 경우!
DB field에 image존재 여부에 대한 field를 정의를 해 놓는 것이 좋다.
image가 존재할 경우에는 image의 경로를 아래와 같이 임의의 파일로
지정을 한다.
if($isimage) $imagepath = "<img scr=image_display.php?id=$id align=left>";
다음 image_display.php를 다음과 같이 생성을 한다.
<?
$con = OCILogon("USER","PSAAWD","SID");
$sql = "SELECT image FROM TABLE_NAME WHERE id = $id";
$que = OCIParse($con,$sql);
OCIDefineByName($que,"IMAGE",&$image);
OCIExecute($que,OCI_DEFAULT);
OCIFetch($que);
# 다른곳과 동일하나 Image의 경우 binary이기 때문에 깨진 문자로 표현이
# 되므로 미리 헤더를 보내줘야 한다.
Header("Content-type: image/jpeg");
$image = $image->load();
echo "$image";
OCIFreeStatement($que);
OCILogoff($con);
?>
|