Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Запись изображения в БД ORACLE

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Ivalar
Отправлено: 21 Декабря, 2012 - 09:12:15
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Дек. 2011  


Помог: 0 раз(а)




Пытаюсь сделать сохранение изображений в БД ORCALE 10g в поле типа BLOB, изображения сохраняются, но в искаженном виде. Пробовал на простеньком bmp, gif и png. В bmp черный квадрат с красным крестом, после заливки происходит смещение красного цвета к более темному. В gif содержится мусор, а png не просматривается вовсе. При сравнении любого из этих залитых файлов с оригиналами через comp в FAR видна замена значений по некоторым OFSSET, что нарушает формат файла. Код сохранения в слегка упрощенном виде:

CODE (htmlphp):
скопировать код в буфер обмена
  1.   PROCEDURE upload_photo (
  2.     p_id IN number,
  3.     p_photo IN blob
  4.   ) IS
  5.   BEGIN
  6.     INSERT INTO soisk_photo(
  7.       id,
  8.       photo
  9.     ) VALUES (
  10.       p_id,
  11.       p_photo
  12.     );
  13.   END;


CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2.  if (!$conn = oci_connect('login', 'password', 'bd')) {
  3.    exit('no connect');
  4.  }
  5.  $filedata = file_get_contents('upfiles/krest.bmp');
  6.  $stmt = oci_parse($conn, 'BEGIN pck.upload_photo(:id, :photo); END;');
  7.  $photo = oci_new_descriptor($conn, OCI_D_LOB);
  8.  $id = '101';
  9.  oci_bind_by_name($stmt, ':id', $id);
  10.  oci_bind_by_name($stmt, ':photo', $photo, -1, OCI_B_BLOB);
  11.  $photo->writetemporary($filedata);
  12.  $photo->close;
  13.  if (!oci_execute($stmt)) {
  14.    exit('no execute');
  15.  }
  16.  oci_commit($conn);
  17.  $photo->free;
  18.  oci_free_statement($stmt);
  19.  echo 'ok';
  20. ?>


Пробовал менять BLOB на CLOB - некоторое улучшение было (появился мусор в png и bmp сохранился без искажений цвета), но это явно не тот вариант, который нужен.

В чем может быть проблема?
 
 Top
avtor.fox
Отправлено: 21 Декабря, 2012 - 09:20:33
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


Помог: 50 раз(а)




Ivalar в том, что хранить саму картинку в базе считается некоторым идиотизмом. Почему не храните ссылку на изображения?
 
 Top
Ivalar
Отправлено: 21 Декабря, 2012 - 09:21:19
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Дек. 2011  


Помог: 0 раз(а)




Бился над проблемой несколько часов, но стоило создать тему и через 30 секунд сам же и нашел ответ. Оказалось, что достаточно прописать необязательный параметр lob_type:

$photo->writetemporary($filedata, OCI_TEMP_BLOB);
(Добавление)
avtor.fox пишет:
Ivalar в том, что хранить саму картинку в базе считается некоторым идиотизмом. Почему не храните ссылку на изображения?

Есть сайт, на нем страница для заполнения резюме с фотографией. Просмотр резюме производят кадровики через форму, написанную в Oracle Form Builder. Исходя из этих требований фотографию проще хранить в БД, плюс нет необходимости отвоевывать квоты на выделения места на жестких дисках.
 
 Top
avtor.fox
Отправлено: 21 Декабря, 2012 - 09:53:48
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


Помог: 50 раз(а)




Ivalar извиняюсь, может быть и грубо ответил, но я не учёл дальнейшую работу с картинкой если взять во внимание что работаете с оракл. Но в любом случае, хранить картинку в базе данных - зло Улыбка
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB