Есть задача.
Нужно писать двоичные данные в 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;
Ну и сответственно все это крутится не под виндами, а под Фрей.