Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 select blob-поле в PHP  [new]
ptik
Member

Откуда: Петрозаводск
Сообщений: 22
Есть таблица

TEST ( B BLOB, ID INTEGER)

Загружать блобы в нее у меня получается, а вот выводить на экран - нет
Использую следующий код (вычитал в мануале РНР):

$dbcon = ocilogon("db", "pass", "xxx");

$query = "select b from test where id=1";

$stmt = OCIParse($dbcon, $query);

OCIExecute($stmt, OCI_DEFAULT);

if (OCIFetchInto($stmt, $row, OCI_ASSOC))

$data = $row['b']->load(); else echo "error";

echo $data;
21 янв 04, 15:44    [501142]     Ответить | Цитировать Сообщить модератору
 Re: select blob-поле в PHP  [new]
Пуп
Member

Откуда:
Сообщений: 386
А что происходит при этом? мож, хедер какой послать надо?

Типа

header("Content-type: image/jpg");
21 янв 04, 15:52    [501167]     Ответить | Цитировать Сообщить модератору
 Re: select blob-поле в PHP  [new]
ptik
Member

Откуда: Петрозаводск
Сообщений: 22
Выводит как раз запись error, то есть

OCIFetchInto($stmt, $row, OCI_ASSOC) - не срабатывает

А про
header("Content-type: image/jpg"); можно поподробнее
21 янв 04, 16:04    [501200]     Ответить | Цитировать Сообщить модератору
 Re: select blob-поле в PHP  [new]
Пуп
Member

Откуда:
Сообщений: 386
Про хедер

Ты посылаешь клиенту/браузеру двоичные данные - это может быть, картинка, pdf документ, экзешник итп. Чтобы клиент понял и правильно обработал эти данные, с помощью хедеров сообщается ему о каких данных идет речь

Например так ты говоришь, что посылаешь pdf.

header("Content-type: application/pdf");

Если хочешь чтобы у клиента появился диалог save as, посылаешь хедер

header("Content-Disposition: attachment; filename=downloaded.pdf");

у него появится save as диалог и именем файла по умолчанию downloaded.pdf.

По поводу 1 го трудно сказать что то конкретное, почему.
21 янв 04, 16:14    [501229]     Ответить | Цитировать Сообщить модератору
 Re: select blob-поле в PHP  [new]
CM Hungry
Member

Откуда:
Сообщений: 207
2ptik: возьми adodb лучше...
21 янв 04, 16:39    [501308]     Ответить | Цитировать Сообщить модератору
 Re: select blob-поле в PHP  [new]
Violina
Member

Откуда: Санкт-Петербург
Сообщений: 3662
to ptik

автор
Загружать блобы в нее у меня получается, а вот выводить на экран - нет


К сожалению функция string ociloadlob(object lob) не описана, применить ее не смогла. Но на основе вашего примера, написала работающий пример:

Загружаем в тестовую таблицу gif картинку
CREATE TABLE IMAGES(ID INT PRIMARY KEY, IMG BLOB);


CREATE OR REPLACE DIRECTORY IMAGES AS 'D:\\_ORA';

DECLARE
V_BLOB BLOB;
V_FILE BFILE;
V_FILE_SIZE INTEGER;
BEGIN
INSERT INTO IMAGES (ID, IMG) VALUES (1, EMPTY_BLOB) RETURNING IMG INTO V_BLOB;

V_FILE := BFILENAME('IMAGES','LOGO.GIF');
V_FILE_SIZE := DBMS_LOB.GETLENGTH(V_FILE);

DBMS_LOB.FILEOPEN( V_FILE );
DBMS_LOB.LOADFROMFILE(V_BLOB, V_FILE, V_FILE_SIZE);
DBMS_LOB.FILECLOSE( V_FILE );

COMMIT;
END;
/


PHP файл
<?php

header("&#241;ontent-type: image/gif");

$db = "";
$cn = ocilogon("
vio","pwd",$db);

$stmt = ociparse($cn, "
select id, img from images");

ociexecute($stmt, OCI_DEFAULT);
while(ocifetch($stmt))
{
$img = ociresult($stmt, "
IMG");
$data = $img->load();
echo $data;
}

ocifreestatement($stmt);

ocilogoff($cn);
?>


Теперь вопрос у меня, в какой документации узнавать о методах объекта типа $img->load(). В PHP Manual не нашла.
21 янв 04, 17:14    [501383]     Ответить | Цитировать Сообщить модератору
 Re: select blob-поле в PHP  [new]
ptik
Member

Откуда: Петрозаводск
Сообщений: 22
to Violina

Поставил твой РНР-файл - появляется та же самая ошибка. Загружаю я файл через РНР тоже:

if(!isset($lob_upload) || $lob_upload == 'none'){
?>
<form action="ex.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 {

$conn = ocilogon("elibr", "oracle", "iais");
$lob = OCINewDescriptor($conn, OCI_D_LOB);
$stmt = OCIParse($conn,"insert into test (b) values(EMPTY_BLOB()) returning b into :b");
OCIBindByName($stmt, ':b', &$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);
}

Все проходит нормально TOAD показывает - запись есть.
Почему ты используешь именно pl/sql для этого?
21 янв 04, 17:34    [501431]     Ответить | Цитировать Сообщить модератору
 Re: select blob-поле в PHP  [new]
Violina
Member

Откуда: Санкт-Петербург
Сообщений: 3662
автор
Почему ты используешь именно pl/sql для этого?


Это просто пример, я выбрала этот способ загнать данные в поле blob, так быстрее.

автор
Поставил твой РНР-файл - появляется та же самая ошибка.


Опубликуйте сообщение об ошибке. Похоже просто не проходит ocifetch($stmt).

А на счет моего вопроса?

Где узнавать о методах объекта типа lob->load() lob->savefile. В PHP Manual не нашла.
21 янв 04, 17:43    [501464]     Ответить | Цитировать Сообщить модератору
 Re: select blob-поле в PHP  [new]
Gt.
Guest
$conn = OCIPLogon("user","passwd","bd");

$sql = "SELECT xml FROM table where id=521";
$stmt = OCIParse($conn, $sql);
OCIExecute($stmt);

if (OCIFetch($stmt)) {
$select = OCIResult($stmt, 1);
}

$xml_content = $select->load();

OCIFreeStatement($stmt);
echo $xml_content ;


я это из мануала брал в свое время, но теперь тоже не могу найти :)
21 янв 04, 17:46    [501472]     Ответить | Цитировать Сообщить модератору
 Re: select blob-поле в PHP  [new]
ptik
Member

Откуда: Петрозаводск
Сообщений: 22
to Violina

О Вашем вопросе:
Сам в первое время удивлялся, как это работает, потому что описания тоже не видел.

О ошибке:

Действительно, fetch не работает

Ошибка такая:
Fatal error: Call to a member function on a non-object in /srv/www/htdocs/elibr/admin/ex1.php on line 13
21 янв 04, 17:51    [501491]     Ответить | Цитировать Сообщить модератору
 Re: select blob-поле в PHP  [new]
ptik
Member

Откуда: Петрозаводск
Сообщений: 22
Код ГОСТЯ заработал. Самое интересное, что пока не вижу ни какой принципиальной разницы между этим кодом и кодом Violina. Да и сам я использовал почти тоже самое.
21 янв 04, 18:04    [501516]     Ответить | Цитировать Сообщить модератору
 Re: select blob-поле в PHP  [new]
Violina
Member

Откуда: Санкт-Петербург
Сообщений: 3662
автор
Fatal error: Call to a member function on a non-object in /srv/www/htdocs/elibr/admin/ex1.php on line 13


Похоже что у вас возвращается не BLOB а простой тип, у которго естественно нету метода load. Може конечно дело в версии PHP

Вот проверочный скрипт для типов колонок. Побробуйте выполнить
<?php


$db = "";
$cn = ocilogon("
vio","ddd",$db);

$stmt = ociparse($cn, "
select id, img from images");

ociexecute($stmt, OCI_DEFAULT);

print "
<TABLE BORDER=\"1\">";
print "
<TR>";
print "
<TH>Name</TH>";
print "
<TH>Type</TH>";
print "
<TH>Length</TH>";
print "
</TR>";
$ncols = OCINumCols($stmt);
for ( $i = 1; $i <= $ncols; $i++ ) {
$column_name = OCIColumnName($stmt,$i);
$column_type = OCIColumnType($stmt,$i);
$column_size = OCIColumnSize($stmt,$i);
print "
<TR>";
print "
<TD>$column_name</TD>";
print "
<TD>$column_type</TD>";
print "
<TD>$column_size</TD>";
print "
</TR>";
}
print "
</TABLE>\n";

ocifreestatement($stmt);

ocilogoff($cn);
?>


У меня выдает

Name Type   Length 

ID NUMBER 22
IMG BLOB 4000
21 янв 04, 18:06    [501521]     Ответить | Цитировать Сообщить модератору
 Re: select blob-поле в PHP  [new]
Violina
Member

Откуда: Санкт-Петербург
Сообщений: 3662
автор
Самое интересное, что пока не вижу ни какой принципиальной разницы между этим кодом и кодом Violina. Да и сам я использовал почти тоже самое.


Разница

$img = ociresult($stmt, 'IMG');

$img = ociresult($stmt, 1);


У меня работает и так и так.
21 янв 04, 18:11    [501526]     Ответить | Цитировать Сообщить модератору
 Re: select blob-поле в PHP  [new]
ptik
Member

Откуда: Петрозаводск
Сообщений: 22
to Violina

О типах: Получил тот же ответ

О разнице: Возможно, обязательно посмотрю, но похоже уже завтра.

Большое спасибо за помощь, Violina.
21 янв 04, 18:22    [501549]     Ответить | Цитировать Сообщить модератору
 Re: select blob-поле в PHP  [new]
Antony Dovgal
Member

Откуда:
Сообщений: 34
К сожалению, в PHP4 у объекта LOBа есть только 4-е метода (не считая free()):
ociloadlob(), ocisavelob(), ocisavelobfile(), ociwritelobtofile().
т.е.
load(), save(), savefile(), writefile()

На данный момент документации по ним нет и я не уверен в том, что она вообще необходима.
Ибо в PHP5 появляются следующие методы:
tell(); (oci_lob_tell( void ))
truncate(); (oci_lob_truncate([ int $len ]))
erase(); (oci_lob_erase([ int $offset, [ int $len]]))
flush(); (oci_lob_flush( void ))
setbuffering(); (ocisetbufferinglob( boolean $flag))
getbuffering(); (ocigetbufferinglob( void ))
rewind(); (oci_lob_rewind( void ))
read(); (oci_lob_read( int $len ))
eof(); (oci_lob_eof( void ))
seek(); (oci_lob_seek( int $offset [, int $flag ]))
write(); (oci_lob_write( string $data [ , int $len ]))
append(); (oci_lob_append( object $lob ))
size(); (oci_lob_size( void ))
и некоторые другие.
В 4-й ветке они не появятся, там будут только багфиксы.

Я буду очень благодарен, если вы скачаете последний снэпшот с http://snaps.php.net и потестируете эти функции в реальной жизни.
Документация к ним в процессе написания, ждите.
22 янв 04, 10:58    [502168]     Ответить | Цитировать Сообщить модератору
 Re: select blob-поле в PHP  [new]
ptik
Member

Откуда: Петрозаводск
Сообщений: 22
Вчера получилось загружать картинку из таблицы.

Сегодня всал вопрос о том, что надо бы и текст в блобах хранить. Так в этом случае появляется опять та же ошибка.

Кто-нибудь может знает об этой отличительной особенности великого РНР :)
22 янв 04, 15:16    [502940]     Ответить | Цитировать Сообщить модератору
 Re: select blob-поле в PHP  [new]
ptik
Member

Откуда: Петрозаводск
Сообщений: 22
Последний вопрос снимаю - все работает.
22 янв 04, 15:40    [503007]     Ответить | Цитировать Сообщить модератору
 Re: select blob-поле в PHP  [new]
Antony Dovgal
Member

Откуда:
Сообщений: 34
var_dump($row); вам поможет.
22 янв 04, 15:50    [503032]     Ответить | Цитировать Сообщить модератору
 Re: select blob-поле в PHP  [new]
amba1
Guest
А как в одном php скрипте выбрать текстовое поле вместе с картинкой из БД?
например выполнить "select id,img from images" и чтоб на экране было выведено
<поле id> и <карнтинка>
29 сен 04, 18:58    [997892]     Ответить | Цитировать Сообщить модератору
 Re: select blob-поле в PHP  [new]
AMBA
Member

Откуда:
Сообщений: 1
Violina
to ptik

У меня не получается сохранить картинку, вытащенную из БД oracle.
Нет ли у кого примера.
30 сен 04, 13:51    [999830]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: select blob-поле в PHP  [new]
IvaSteel
Member

Откуда: Киев
Сообщений: 244
Здравствуйте!

Выбираю select'oм BLOB тип данных с Oracle 10g (php 5.1.6).

$conn = OCIPLogon("ibd","amd","iips"); 

$sql = "SELECT PHOTO FROM ibd.i_ort"; 
$stmt = OCIParse($conn, $sql); 
OCIExecute($stmt); 

if (OCIFetch($stmt)) { 
$select = OCIResult($stmt, 1); 
} 

$photo = $select->load(); 

OCIFreeStatement($stmt); 
echo $photo;

Выводит фотку, но в формате текста((
№єВГДЕЖЗИЙКТУФХЦЧШЩЪвгдежзийктуфхцчшщъяЪ ?ъ¦Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ( Љ(И Љ3HМЄ2ДкM-•uв=С™nµќ6^«%Т)Ѓ5ѓ«|Kр¦ћ0ЪґS


Помогите побороть, а то уже кучу схожых методов перепробовал и везде текст вместо фотки(
23 июл 09, 18:30    [7453293]     Ответить | Цитировать Сообщить модератору
 Re: select blob-поле в PHP  [new]
uin
Member

Откуда:
Сообщений: 202
IvaSteel,

А кто будет говорить браузеру, что это картинка.
Выставляй header
23 июл 09, 18:36    [7453314]     Ответить | Цитировать Сообщить модератору
 Re: select blob-поле в PHP  [new]
IvaSteel
Member

Откуда: Киев
Сообщений: 244
header("content-type: image/jpg");
1. Рисунок может быть разных типов.
2. При данном варианте ИЕ предлагает загрузить сам пхп файл(
23 июл 09, 18:44    [7453338]     Ответить | Цитировать Сообщить модератору
 Re: select blob-поле в PHP  [new]
IvaSteel
Member

Откуда: Киев
Сообщений: 244
Может кто знает, как помочь?
26 июл 09, 15:27    [7461141]     Ответить | Цитировать Сообщить модератору
 Re: select blob-поле в PHP  [new]
IvaSteel
Member

Откуда: Киев
Сообщений: 244
Может это связано с настройками php или IIS ?
27 июл 09, 16:30    [7465261]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить