IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Веб-программирование (https://www.imho.ws/forumdisplay.php?f=29)
-   -   MySQL, BLOB и PHP... (https://www.imho.ws/showthread.php?t=23509)

Ku6ep 04.03.2003 00:14

MySQL, BLOB и PHP...
 
Есть база MySQL в ней хранятся в одном из полей типа BLOB в одной из таблиц картинки, дык как мне получить её оттуда и отобразить на страничке?
С радостью посмотрю на пример скрипта (желательно на PHP) а не на совет RTFM. Как вобще работать с BLOB полями?

Aeon 04.03.2003 01:08

альтернативный вариант
 
хмм... я вообще всегда храню картинки как файлы, а в базу кидаю только имя файла и если нужно директорию в которой он хранится... мне так проще, да и на базу куда меньше нагрузка...

Ku6ep 04.03.2003 01:14

Это конечно всё хорошо, и хранить линки в базе - проверенный способ, НО есть ситуация и надобно решение... Кроме того, с точки зрения скажем целостности данных есть смысл хранить картинки в базе, то есть делая бэкап базы ты практически сохраняешь всё что у тебя есть одним движением... Можно ещё и загонять в базу сами скрипты :) К примеру в отдельной таблице в поля типа TEXT.
Но опять таки, есть у меня такой вопрос и мне нужна помощь...

penguin 04.03.2003 01:15

Это делается на PHP без проблем и элементарно.
Код:

$base=mysql_connect("хост","логин","пароль");
mysql_select_db("имя базы");
$result=mysql_query("SELECT picture FROM pix WHERE id=1"); // здесь напиши свой запрос, для получения содержимого поля BLOB с картинкой
mysql_close($base);

$line=mysql_fetch_row($result);
$pic=$line[0];
header("Content-type: image/jpeg");
echo($pic);

И все дела.

А вот при добавлении двоичных данных (картинок в том числе) в базу, надо не забыть предварительно, применить на них ф-цию addslashes, иначе ничего хорошего не выйдет.

Ku6ep 04.03.2003 01:22

Стопчик... А если мне надо вставить полученную картинку в строку типа
Код:

<img src="вот сюда мне надо вставить то что я из базы получил">
тогда как действовать? Потому как в твоём варианте (спасибо кстати) декодированием данных из базы собственно в имедж занимается браузер...

penguin 04.03.2003 01:35

Ещё проще. Если, например, весь вышеназванный скрипт назвать pixa.php, то пишешь так
Код:

<img src="pixa.php">
:)

penguin 04.03.2003 01:45

На самом деле для браузера значение имеет не столько расширение файла, сколько его mime тип. Этот тип передаётся с сервера в заголовке файла. Обычно сервер определяет этот тип по расширению файла на сервере. Но в этом случае мы послылаем ему тот тип, который нам нужен (Content-type: image/jpeg) из скрипта.

Ku6ep 04.03.2003 01:53

Это - единственный путь? :(
Просто получается я должен через что-то (скажем через адресную строку) передать в некий скрипт id картинки вызывая его-же из другого скрипта :)
Ну, впрочем могло быть и хуже, большое спасибо!

Aeon 04.03.2003 01:59

ну дык... зачем передавать через адресную строку...
можно ведь просто сказать, <img src="pixa.php?id=15">

Ku6ep 04.03.2003 02:12

Это я понимаю :) В конечном итоге имеем что-то такое:

take_img.php
PHP код:

if($id){
$db=mysql-connect("localhost""root");
mysql_select_db("mydb");
$result=mysql_query("SELECT picture FROM images WHERE id=$id");
$row=mysql_fetch_array($result);
$pic=$row["picture"];
header("Content-type: image/jpeg");
echo(
$pic);


paste_img.php
PHP код:

<?
$id=1;
?>
<img src="<?echo "take_img.php?id=$id";?>">


penguin 04.03.2003 02:19

Ну вобщем да, так оно обычно и делается, хотя варианты всегда есть. Если ты хочешь, например, чтоб у тебя был только один скрипт - сделай один, чтоб с одним параметром выводился текст, с другим - картинка, и вызывай его из него самого.

Кстати, обрати внимание, например, на свойства картинки - аватара слева. Вот его урл

http://imho.ws/avatar.php?userid=193...ine=1041493111

Тот же принцип :)

Stasik 04.03.2003 17:29

$extension=strtolower(substr(strrchr($filename,"."),1));
if ($extension=='gif') {
header('Content-type: image/gif');
} elseif ($extension=='jpg' or $extension=='jpeg') {
header('Content-type: image/jpeg');
} elseif ($extension=='png') {
header('Content-type: image/png');
}

во

и как и VB приделывать надо к УРЛУ или дату или md хэш какой-нидь, чтобы кэширование избегать

Ku6ep 04.03.2003 18:10

Какой файлнейм? Откуда? У меня двоичные данные в ячейке таблицы в БД хранятся, откуда там имя файла? :)
Но есть ещё нюанс... Если тип поля BLOB и стоит NOT NULL то как мне проверить есть в ячейке данные или нет? Проверять на пустую строку? Или на что?
И ещё, раз пошла такая пьянка :) Как ВНОСИТЬ данные в ячейку типа BLOB в MySQL при помощи PHP... Тогда эта тема будет законченной и готовой для FAQ если таковые кто-то тут делает... :)

RaZEr 05.03.2003 16:59

Черт, столько статей на сайтах по ПХП про то как работать с картинками в базе ...

http://php.spb.ru/php/image.html
http://ardzhan.km.ru/doc/library.php?id=146

Ku6ep 05.03.2003 23:31

Ну извини что вывел тебя из себя, что ты даже чертыхаться стал... Прошу прощения что побеспокоил Вашу светлость, спасибо за линки.


Часовой пояс GMT +4, время: 20:55.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.