The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Perl + BLOB в MySQL"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Perl + BLOB в MySQL"
Сообщение от Osirix emailИскать по авторуВ закладки(ok) on 24-Апр-04, 13:28  (MSK)
Есть задача.
Нужно писать двоичные данные в BLOB поля базы MySQL. Данные берутся из файлана диске.
Сложность заключается в том, что двоичные данные перед их вставкой в SQL запрос к базе данных должны специальным образом обрабатываться (это как я понял заменяться символы кавычек, переносов каретки, итд...).
В инетрнете инфа по этому крайне скудная, но описывается 3 способа.
1. Цитата  
SELECT QUOTE("$jpg")
, где $jpg это переменная с бинарными данными, а потом результаты этого запроса вставляем в запрос с занесением данных. Ну или может как-то попроще но суть такова что свма БД готовид данные для занесения в БЛОБ.
2.
Цитата  

my $sql = "UPDATE `m_snif` SET pic1=? WHERE id=$id";

   my $sth = $db->prepare($sql) or do {
       die "It didn't work. [$DBI::errstr]\n";
   };
   $sth->bind_param(1, $jpg);

   $sth->execute or do {
       die "It didn't work. [$DBI::errstr]\n";
   };

Так называемый способ bind_param после prepare.

и
3. это просто самому заменять спец символы через регулярные выражения
Цитата  

$jpg =~ s///g;
$jpg =~ s/00//g;
$jpg =~ s/'/'/g;
$jpg =~ s/"/"/g;
$jpg =~ s/\t/\\t/g;
$jpg =~ s/\n/\\n/g;
$jpg =~ s/\r/\\r/g;
$jpg =~ s/\b/\\b/g;
$jpg =~ s/\0/\\0/g;

Это конечно все очень замечательно, что так много способов существует. Но они все не работают!!!
Помогите! Как? Может кто делал?

Да к стати. Чтение из файла происходит вот так:
Исходный код  

open    JPG, "</usr/home/Osirix/pics/00000001.jpg" or die "$!";
       binmode (JPG); # Только ли в Windows нужа эта строка?
       $jpg = <JPG>;
       close   JPG;

Ну и сответственно все это крутится не под виндами, а под Фрей.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Perl + BLOB в MySQL"
Сообщение от Асен Тотин emailИскать по авторуВ закладки on 24-Апр-04, 22:52  (MSK)
Привет,

Занесение картинок в БД - само по себе неправильно. Суть БД состоит в том, чтобы иметь мссив данных, в котором можно вести поиски. Вески (смысленный) поиск в двоичных данных картинки, конечно, невозможно. На все остальные случаи жизни есть файловая система.

Поэтому если вам нужно связать объект в БД с картинкой, просто занесите в БД путь к этой картинке - сэкономите массу времени и ресурсов.

WWell,

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Perl + BLOB в MySQL"
Сообщение от bars Искать по авторуВ закладки(??) on 25-Апр-04, 11:50  (MSK)
>Привет,
>
>Занесение картинок в БД - само по себе неправильно. Суть БД состоит
>в том, чтобы иметь мссив данных, в котором можно вести поиски.
>Вески (смысленный) поиск в двоичных данных картинки, конечно, невозможно. На все
>остальные случаи жизни есть файловая система.
>
>Поэтому если вам нужно связать объект в БД с картинкой, просто занесите
>в БД путь к этой картинке - сэкономите массу времени и
>ресурсов.
Зато удобно сделав дамп базы иметь в нем весь сайт.
Не нужно думать о правах на дирректории куда эти файлы в вашем случае должны будут писаться.
Вообщем в этом тоже что-то есть.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Perl + BLOB в MySQL"
Сообщение от Osirix emailИскать по авторуВ закладки(??) on 25-Апр-04, 16:49  (MSK)
>Занесение картинок в БД - само по себе неправильно. Суть БД состоит
>в том, чтобы иметь мссив данных, в котором можно вести поиски.
>Вески (смысленный) поиск в двоичных данных картинки, конечно, невозможно. На все
>остальные случаи жизни есть файловая система.
>
>Поэтому если вам нужно связать объект в БД с картинкой, просто занесите
>в БД путь к этой картинке - сэкономите массу времени и
>ресурсов.

Если бы мне этго было не нужно, я бы не спрашивал.
Мне проще держать сотню картинок в БД, чем поднимать лишние сервисы на удаленных серверах что бы апач смог до них добраться.

К тому же в Mysql специально придуман тип данных BLOB, так почему туда нельзя записать то для чего он предназначен?
Я придумал способ как это обойти. Перекодировать картинки допустим в base64 и запихать их в BLOB как текстовую информацию, но мне это решение не нравится, в подобном случае я могу их и в TEXT запихать...
Чушь какая-то...

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Perl + BLOB в MySQL"
Сообщение от Osirix emailИскать по авторуВ закладки(??) on 25-Апр-04, 20:21  (MSK)
Все я сам разобрался. =)
Вся проблема была ы считывании из файла в переменную.
Надо делать вот так:
open    JPG, "</usr/home/Osirix/pics/00000001.jpg" or die "$!";
$doc_len = read JPG, $jpg, 999999;
close   JPG;

ну и потом:
$sth=$db->prepare("UPDATE `m_snif` SET pic1=? WHERE id = $id") || die "$dbh->errstr\n";
$sth->execute($jpg) || die "$sth->errstr\n";

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Perl + BLOB в MySQL"
Сообщение от alchie Искать по авторуВ закладки(??) on 26-Апр-04, 03:48  (MSK)
>Все я сам разобрался. =)
>Вся проблема была ы считывании из файла в переменную.
>Надо делать вот так:
>open    JPG, "</usr>$doc_len = read JPG, $jpg, 999999;
>close   JPG;
>
>ну и потом:
>$sth=$db->prepare("UPDATE `m_snif` SET pic1=? WHERE id = $id") || die "$dbh->errstr\n";
>$sth->execute($jpg) || die "$sth->errstr\n";

$qjpg = $dbh->quote($jpg);
$dbh->do("UPDATE m_snif SET pic=$qjpg WHERE id=$id")

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру