PHP와 Oracle8에서 varchar2는 4000bytes까지만 됩니다. 그럴 경우 더 큰 타입은?
long, lob 등이 있는데 oracle8에서는 long보다 lob를 권장합니다.
long은 oracle7과의 호환을 위해 있는 타입이라는 설명이 있습니다.
아무튼 그 lob 중에서도 blob를 이용하면 4000bytes가 넘는 내용을
입출력할 수 있습니다.
clob는 언어의 문제로 설정이 복잡하지만 blob는 그냥 됩니다.
아무튼 다음은 간단한 test용 code입니다.
참고로 http://oops.org/ 에 MINI LECTURE를 보면 php에서 lob 타입을 쓰는 강좌가
있는데.... 거기에서는 select 시에 load()를 사용했는데... 제가 만든 예제에서는
load()를 하지 않습니다. 왜 그런지는 직접 연구해보세요. -0-
그리고 $text는 4000bytes 이상 늘려서 해보세요. 게시판이라 잘랐습니다.
<?
# create table test (title varchar2(100), text blob);
echo "title: ".$title = time ();
$text =
"
한글도 입력하여 테스트합니다. synec!
ASDLJKAK14323tgfdh554tgFYdjh36tfw6t54rth5edyj57kASDLJKAK14323tgfdh554tgFYdjh36tfw6t54rth5edyj57ktyg'45y09i8ui24-tgi;340re8oiguos.2058ryuikjh23rw#YHRF%WU^TRHGF$%YERFDB^*I&U%^%ERASDLJKAK14323tgfdh554tgFYdjh36tfw6t54rth5edyj57ktyg'45y09i8ui24-tgi;340re8oiguos.2058ryuikjh23rw#YHRF%WU^TRHGF$%YERFDB^*I&U%^%ERASDLJKAK14323tgfdh554tgFYdjh36tfw6t54rth5edyj57ktyg'45y09i8ui24-tgi;340re8oiguos.2058ryuikjh23rw#YHRF%WU^TRHGF$%YERFDB^*I&U%^%ER
80.!@#$%^&*()_+|1234567890-=\[];'./,{}:"<>?ASDLJKAK14323tgfdh554tgFYdjh36tfw6t54rth5edyj57kASDLJKAK14323tgfdh554tgFYdjh36tfw6t54rth5edyj57ktyg'45y09i8ui24-tgi;340re8oiguos.2058ryuikjh23rw#YHRF%WU^TRHGF$%YERFDB^*I&U%^%ERASDLJKAK14323tgfdh554tgFYdjh36tfw6t54rth5edyj57ktyg'45y09i8ui24-tgi;340re8oiguos.2058ryuikjh23rw#YHRF%WU^TRHGF$%YERFDB^*I&U%^%ERASDLJKAK14323tgfdh554tgFYdjh36tfw6t54rth5edyj57ktyg'45y09i8ui24-tgi;340re8oiguos.2058ryuikjh23rw#YHRF%WU^TRHGF$%YERFDB^*I&U%^%ER
";
# LOGIN
echo "<hr>login: ".$conn = OCILogon (USER, PASSWORD, SID);
# INSERT
echo "<hr>sql: ".$sql = "INSERT INTO test VALUES ('$title', EMPTY_BLOB()) RETURNING text INTO :text";
echo "<hr>parse: ".$stmt = OCIParse ($conn, $sql);
echo "<hr>new_desc: ".$blob = OCINewDescriptor ($conn, OCI_D_LOB);
echo "<hr>bind: ".OCIBindByName ($stmt, ":text", &$blob, -1, OCI_B_BLOB);
echo "<hr>exec: ".OCIExecute ($stmt, OCI_DEFAULT);
echo "<hr>save: ".$blob->save($text);
echo "<hr>free: ".$blob->free();
echo "<hr>commit: ".OCICommit ($conn);
echo "<hr>free_state: ".OCIFreeStatement($stmt);
# SELECT
echo "<hr>sql: ".$sql = "SELECT title, text FROM test";
echo "<hr>parse: ".$stmt = OCIParse ($conn, $sql);
echo "<hr>exec: ".OCIExecute ($stmt, OCI_DEFAULT);
echo "<hr>row: ".$row = OCIFetchStatement ($stmt, $result);
echo "<hr>free_state: ".OCIFreeStatement($stmt);
# LOGOUT
echo "<hr>logout: ".OCILogOff($conn);
# PRINT
echo "<p><hr>result_title: ".$result[TITLE][$row-1];
echo "<br>text size: ".strlen ($result[TEXT][$row-1]);
echo "<br>result_text: ".$result[TEXT][$row-1];
?>
|