upload в blob

dddima

Guest
upload в blob

Вопрос: как закачать файл в LOB поле через броузер. Даже не знаю с чего начать, оно ведь хранит там данные в бинарном коде, т.е. получаеться нужно весь файл без форматирования присвоить переменной, а потом передать ее в это поле???
Или есть другой выход?
 

tony2001

TeaM PHPClub
>Даже не знаю с чего начать
1) oci_new_descriptor();
2) oci_bind_by_name();
3) делаем INSERT, в котором возвращаем дескриптор в нашу переменную;
4) пишем в LOB.

какой шаг непонятен?
 

dddima

Guest
Автор оригинала: tony2001
>Даже не знаю с чего начать
1) oci_new_descriptor();
2) oci_bind_by_name();
3) делаем INSERT, в котором возвращаем дескриптор в нашу переменную;
4) пишем в LOB.

какой шаг непонятен?
Так как я думал. А если файл большой, это же переменная получится дай боже и если несколько человек захотят что-то залить в базу, то тут может все и накрыться... Другого пути нет, чтобы оракл сам это файл забрал, только показать где он лежит... Или что-то еще???
 

tony2001

TeaM PHPClub
>А если файл большой, это же переменная получится дай боже
????
какая связь между *дескриптором* и размером LOB'а?
никакой.

>и если несколько человек захотят что-то залить в базу, то тут может все и накрыться...
>Другого пути нет, чтобы оракл сам это файл забрал, только показать где он лежит...
о чем ты?
ты читал то, что я написал?
 

dddima

Guest
Сорри. Не разобался. Спасибо за совет...

-~{}~ 18.08.05 11:05:

С закачкой разобрался, а как мне выводить потом забирать файлы. С картинкой я разобрался... Создаю файл image.php, туда кидаю нужный id, вывожу header и просто вывожу CLOB. А если это текстовый документ? Если я просто создам файл, в него запишу свое поле, создам не него ссыллку? А как потом его удалить? или есть другие варианты?

-~{}~ 05.09.05 14:38:

Продолжение темы....
Все, кто интересовался, видели в php manual, пример функции oci_new_descriptor(); , так у меня вопрос каого она не работает???
Вот мой код:

$lob = OCINewDescriptor($conn, OCI_D_LOB);
$stmt = OCIParse($conn,"insert into ".$table." (id, image) values(".$numcols.", EMPTY_BLOB()) returning image into :image");
OCIBindByName($stmt, ":image", &$lob, -1, OCI_B_BLOB);
OCIExecute($stmt);
if($lob->savefile($v[$i]))
{
OCICommit($conn);
echo "Blob successfully uploaded";
}
OCIFreeDesc($lob);
OCIFreeStatement($stmt);
Стащил из мануала и подставил свое...
Форма аплoада файла такая:
<form method=\"POST\" ACTION=\"\">
<input type=\"file\" name=\"v[99]\">
</form>
Таблица bk содержит поля image, id, about, filebody, filename. Все кроме id - CLOBы...
А оно ругается...
ociexecute(): OCIStmtExecute: ORA-00904: "IMAGE": invalid identifier
и соответсвенно
savefile(): OCILobWrite: OCI_INVALID_HANDLE
???? Что не так??? Подскажите пожалуйста....
 

kushnirt

Новичок
Уменя была близкая проблема при вызове PLSQL процедуры, только переменные (-ые - важно с одной проблема не возникает)
решилась только после указания длинны переменной.
OCIBindByName($s, ":bind3", $map_name,100);
мб поможет?

-~{}~ 15.09.05 13:10:

И кстати надо иметь в виду, в мануале этого я не видел, что
OCIBindByName объявляется до OCIExecute, а конкретно связывается после начала OCIExecute
 

tony2001

TeaM PHPClub
>ociexecute(): OCIStmtExecute: ORA-00904: "IMAGE": invalid identifier
нет такого поля в таблице.
 
Сверху