lob->load
(No version information available, might only be in SVN)
lob->load — Возвращает содержимое объекта LOB
Описание
Возвращает содержимое объекта LOB. Помните о том, что не всякий LOB может уместиться в переменной, на это влияет директива memory_limit. Поэтому, в большинстве случаев этот метод может быть заменен oci_lob_read(). В случае ошибки lob->load() вернет FALSE.
Замечание:
В версиях PHP ниже 5.0.0 эта функция называлась ociloadlob(). В PHP 5.0.0 и выше ociloadlob() является алиасом oci_lob_load(), поэтому вы можете продолжать использовать это имя, однако это не рекомендуется.
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Расширения для работы с базами данных
- Расширения для работы с базами данных отдельных производителей
- Oracle OCI8
- oci_bind_array_by_name
- oci_bind_by_name
- oci_cancel
- oci_client_version
- oci_close
- oci_commit
- oci_connect
- oci_define_by_name
- oci_error
- oci_execute
- oci_fetch_all
- oci_fetch_array
- oci_fetch_assoc
- oci_fetch_object
- oci_fetch_row
- oci_fetch
- oci_field_is_null
- oci_field_name
- oci_field_precision
- oci_field_scale
- oci_field_size
- oci_field_type_raw
- oci_field_type
- oci_free_descriptor
- oci_free_statement
- oci_get_implicit_resultset
- oci_internal_debug
- oci_lob_copy
- oci_lob_is_equal
- oci_new_collection
- oci_new_connect
- oci_new_cursor
- oci_new_descriptor
- oci_num_fields
- oci_num_rows
- oci_parse
- oci_password_change
- oci_pconnect
- oci_result
- oci_rollback
- oci_server_version
- oci_set_action
- oci_set_client_identifier
- oci_set_client_info
- oci_set_edition
- oci_set_module_name
- oci_set_prefetch
- oci_statement_type
Коментарии
I'll give you example how to download a file from db without storing it on server's FS:
It works like this - point yor browser to index.php?name=file.ext
Just make sure that file "file.ext" exists in your db!
Code:
<?php
$dbConnection=ocilogon('user','pass','data.world'); //login stuff
$sql_SelectBlob='select document_body,filename from tdocuments where id=1'; //selecting a blob field named 'document_body' with id = 1
$statement=OCIParse($dbConnection,$sql_SelectBlob);
OCIExecute($statement) or die($sql_SelectBlob.'<hr>');
if(OCIFetch($statement)) //if file exists
{
$a=OCIResult($statement,"DOCUMENT_BODY");
}
header('Content-type: application/octet-stream;');
header('Content-disposition: attachment;filename='.$_GET['name']);
print $a->load();
//browser promts to save or open the file
?>
Have fun!
Ps. To prevent IE errors like 'File not found!' after downloading file from db I recommend to add next two lines into header:
header('Cache-Control: max-age=0');
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
With this, IE will open any file normally :)
Reading a OCI-Lob by using the load() function will return only 2k chars, so you miss part of its contents.
For example:
<?php
$sql = "BEGIN :res := getACLOB(id).getclobval(); END;";
$stmt = oci_parse($conn, $sql);
$resVal = OCINewDescriptor($conn, OCI_D_LOB);
oci_bind_by_name($stmt, ":res", $resVal, -1, OCI_B_CLOB);
oci_execute($stmt);
$foo = $resVal->load();
// $foo will contain only 2k chars
// the following will neither work
$foo = $resVal->read( $resVal->size() );
// $foo will contain only 2k chars
?>
Use this instead:
<?php
$sql = "BEGIN :res := getACLOB(id).getclobval(); END;";
$stmt = oci_parse($conn, $sql);
$resVal = OCINewDescriptor($conn, OCI_D_LOB);
oci_bind_by_name($stmt, ":res", $resVal, -1, OCI_B_CLOB);
oci_execute($stmt);
$foo = "";
while(!$resVal->eof()){
$foo .= $resVal->read(2000);
}
// $foo will contain full contents of the CLOB
?>