Serguitar
Новичок->продвинутый
Вопрос по выборке из поля blob в базе Оракл с использованием ADODB
Всем доброго времени суток.
Вопрос по выводу картинок из поля blob в базе Оракл. Знаю, что есть функция lob->read, позволяющая считывать тот объект, что лежит в блобе.
Как вызывается эта функция из библиотеки AdoDB?
Структура приложения строится так:
есть базовый класс, работающий с ADODB и возвращающий объект в случае успешного коннекта к Оракл.
Функции ADODB в разных классах приложения вызываются через
Как же мне получить то, что лежит в поле blob, выборкой вида:
Заранее спасибо за помощь.
-~{}~ 22.11.05 18:05:
Неужели ни у кого не возникало такой проблемы?
-~{}~ 28.11.05 11:35:
Никто не ответил за месяц, разобрался сам, как оказалось, все совсем не сложно.
Реализовал следующим образом:
В классе, работающем с данными, которые вынимаются из Оракла и передаются Smarty-шаблону, создал ещё один метод, назовем его ImageForResource($id), где входным параметром будет айдишник того ресурса, картинку которого в шаблоне нужно вывести.
Ресурсы в шаблоне выводятся в секции, так что вывести картинку совсем просто.
Пишем <img src=/img.php?id={$_id[section_name]}> в шаблоне, передавая id - шник выводимого ресурса, а в файле img.php вызываем вышеуказанный метод.
В методе все, что нужно, это чтобы работала ф-ция
[script]imagecreatefromstring(string $data);[/script].
В-общем, то, что я написал, выглядит где-то так:
[script]
function image_out($pict, $type, $image_max_width, $image_max_height) {
/** Запрос и выполнение */
$sql="SELECT picture, category_id FROM resources WHERE ID=".$this->ado->Param('id')."";
$sql=$this->ado->Prepare($sql);
$topic=$this->ado->Execute($sql, array('ID'=>$pict));
/** Ну, образно... */
$ar=$topic->GetArray();
$data=$ar[0][0];
/** а теперь мочим картинку */
$im = imagecreatefromstring($data);
/** преобразовываем размер картинки в нужный размер */
if (imagesx($im)>$image_max_width) $percents=floor($image_max_width*100/imagesx($im));
elseif (imagesy($im)>$image_max_height) $percents=floor($image_max_height*100/imagesy($im));
else $percents=100;
$w=imagesx($im)*$percents/100;
$h=imagesy($im)*$percents/100;
$im1=imagecreatetruecolor($w,$h);
imagecopyresampled($im1,$im,0,0,0,0,$w,$h,imagesx($im),imagesy($im));
/** И выводим! */
imagejpeg($im1);
/** А потом сносим */
imagedestroy($im1);
/**
Ещё у меня есть условие если у ресурса нет картинки. Добавите сами, кому нужно будет.
*/
}
[/script]
Всем спасибо за участие.
Всем доброго времени суток.
Вопрос по выводу картинок из поля blob в базе Оракл. Знаю, что есть функция lob->read, позволяющая считывать тот объект, что лежит в блобе.
Как вызывается эта функция из библиотеки AdoDB?
Структура приложения строится так:
есть базовый класс, работающий с ADODB и возвращающий объект в случае успешного коннекта к Оракл.
Функции ADODB в разных классах приложения вызываются через
PHP:
$this->ado->Prepare(..................);
$this->ado->Execute(..................);
................................................
PHP:
$catalog=$this->ado->Execute($sql, array(......));
while(!$catalog->EOF) {
........................................
$smarty->assign('picture', $catalog->fields['PICTURE']); // то, что лежит в blob'e нужно передать шаблону и вывести на страницу.
........................................
$catalog->MoveNext();
}
-~{}~ 22.11.05 18:05:
Неужели ни у кого не возникало такой проблемы?
-~{}~ 28.11.05 11:35:
Никто не ответил за месяц, разобрался сам, как оказалось, все совсем не сложно.
Реализовал следующим образом:
В классе, работающем с данными, которые вынимаются из Оракла и передаются Smarty-шаблону, создал ещё один метод, назовем его ImageForResource($id), где входным параметром будет айдишник того ресурса, картинку которого в шаблоне нужно вывести.
Ресурсы в шаблоне выводятся в секции, так что вывести картинку совсем просто.
Пишем <img src=/img.php?id={$_id[section_name]}> в шаблоне, передавая id - шник выводимого ресурса, а в файле img.php вызываем вышеуказанный метод.
В методе все, что нужно, это чтобы работала ф-ция
[script]imagecreatefromstring(string $data);[/script].
В-общем, то, что я написал, выглядит где-то так:
[script]
function image_out($pict, $type, $image_max_width, $image_max_height) {
/** Запрос и выполнение */
$sql="SELECT picture, category_id FROM resources WHERE ID=".$this->ado->Param('id')."";
$sql=$this->ado->Prepare($sql);
$topic=$this->ado->Execute($sql, array('ID'=>$pict));
/** Ну, образно... */
$ar=$topic->GetArray();
$data=$ar[0][0];
/** а теперь мочим картинку */
$im = imagecreatefromstring($data);
/** преобразовываем размер картинки в нужный размер */
if (imagesx($im)>$image_max_width) $percents=floor($image_max_width*100/imagesx($im));
elseif (imagesy($im)>$image_max_height) $percents=floor($image_max_height*100/imagesy($im));
else $percents=100;
$w=imagesx($im)*$percents/100;
$h=imagesy($im)*$percents/100;
$im1=imagecreatetruecolor($w,$h);
imagecopyresampled($im1,$im,0,0,0,0,$w,$h,imagesx($im),imagesy($im));
/** И выводим! */
imagejpeg($im1);
/** А потом сносим */
imagedestroy($im1);
/**
Ещё у меня есть условие если у ресурса нет картинки. Добавите сами, кому нужно будет.
*/
}
[/script]
Всем спасибо за участие.