 |
(PHP
3>= 3.0.7, PHP 4) OCINewDescriptor - инициализирует новый пустой LOB
или FILE-дескриптор. Описаниеstring OCINewDescriptor
(int connection [, int type]) OCINewDescriptor() выделяет место для
хранения дескрипторов или LOB-локаторов. Правильными значениями для type
являются OCI_D_FILE, OCI_D_LOB, OCI_D_ROWID. Для LOB-дескрипторов методы load,
save и savefile ассоциированы с этим дескриптором, для BFILE имеется только метод
load. См. примечания по использованию во втором примере.
Пример 1. OCINewDescriptor<?php
/* Это скрипт разработан для вызова из HTML-формы. * Он ожидает, что ему будут
переданы из формы $user, $password, $table, $where * и $commitsize. Затем скрипт
удаляет выбранные ряды * с использованием ROWID и подтверждает после каждой установки
* $commitsize-рядов. (Используйте осторожно, отката нет) */ $conn = OCILogon($user,
$password); $stmt = OCIParse($conn,"select rowid from $table $where"); $rowid
= OCINewDescriptor($conn,OCI_D_ROWID); OCIDefineByName($stmt,"ROWID",&$rowid);
OCIExecute($stmt); while ( OCIFetch($stmt) ) { $nrows = OCIRowCount($stmt); $delete
= OCIParse($conn,"delete from $table where ROWID = :rid"); OCIBindByName($delete,":rid",&$rowid,-1,OCI_B_ROWID);
OCIExecute($delete); print "$nrows\n"; if ( ($nrows % $commitsize) == 0 ) { OCICommit($conn);
} } $nrows = OCIRowCount($stmt); print "$nrows deleted...\n"; OCIFreeStatement($stmt);
OCILogoff($conn); ?> |
<?php
/* Этот скрипт демонстрирует загрузку файлов в LOB-столбцы * Поле формы для этого
примера выглядит так: * <form action="upload.php" method="post" enctype="multipart/form-data">
* <input type="file" name="lob_upload"> * ... */ if(!isset($lob_upload)
|| $lob_upload == 'none'){ ?> <form action="upload.php" method="post"
enctype="multipart/form-data"> Upload file: <input type="file" name="lob_upload"><br>
<input type="submit" value="Upload"> - <input type="reset"> </form>
<?php } else { // $lob_upload содержит временное имя загружаемого файла. //
См. также раздел возможностей загрузки файлов, // если вам нужно использовать
безопасную загрузку. $conn = OCILogon($user, $password); $lob = OCINewDescriptor($conn,
OCI_D_LOB); $stmt = OCIParse($conn,"insert into $table (id, the_blob) values(my_seq.NEXTVAL,
EMPTY_BLOB()) returning the_blob into :the_blob"); OCIBindByName($stmt, ':the_blob',
&$lob, -1, OCI_B_BLOB); OCIExecute($stmt, OCI_DEFAULT); if($lob->savefile($lob_upload)){
OCICommit($conn); echo "Blob successfully uploaded\n"; }else{ echo "Couldn't upload
Blob\n"; } OCIFreeDesc($lob); OCIFreeStatement($stmt); OCILogoff($conn); } ?> |
|
Пример 2. OCINewDescriptor<?php
/* Вызывается хранимые процедуры PL/SQL, содержащие clobs в качестве * параметров
ввода (PHP 4 >= 4.0.6). * Пример подписи хранимой процедуры PL/SQL выглядит
так: * * PROCEDURE save_data * Имя аргумента Тип In/Out Default? * ------------------------------
----------------------- ------ -------- * KEY NUMBER(38) IN * DATA CLOB IN * */
$conn = OCILogon($user, $password); $stmt = OCIParse($conn, "begin save_data(:key,
:data); end;"); $clob = OCINewDescriptor($conn, OCI_D_LOB); OCIBindByName($stmt,
':key', $key); OCIBindByName($stmt, ':data', $clob, -1, OCI_B_CLOB); $clob->WriteTemporary($data);
OCIExecute($stmt, OCI_DEFAULT); OCICommit($conn); $clob->close(); $clob->free();
OCIFreeStatement($stmt); ?> |
|
|  |