Как хранить картинки в БД MySQL?

Целесеобразность такого решения давайте не будем тут затрагивать.
1) Какой тип поля использовать и вообще как харнится там картинка, в виде набора байтов?
2) Вопрос, вытекающий из предыдущего, как сделать запрос на вставку и указать это jpg, png, gif и т.д.?
3) Как выводить на странице? Когда мы просто картинку средствами php тдаём там всё понятно header отдаём файловый, потом сам файл и всё ок, но здесь header уже передан и это обычная страница или там стоит типа src="getimage.php?id=738" где уже php скрипт формирует и отдаёт каждую картинку?
  • Вопрос задан
  • 38226 просмотров
Пригласить эксперта
Ответы на вопрос 4
sim3x
@sim3x
1) Какой тип поля использовать и вообще как харнится там картинка, в виде набора байтов?
blob

2) Вопрос, вытекающий из предыдущего, как сделать запрос на вставку и указать это jpg, png, gif и т.д.?
Отдельное поле с указанием типа.
Или делать магию узнавания типа файла по магии php.net/manual/en/function.mime-content-type.php
Или (правильное решение) после загрузки файла приводить его к одному типу (жпг, пнг, вебм)
Или даже так https://stackoverflow.com/a/21732109
<img src="data:image/png;base64,'.base64_encode($row['image']).'">


3) Как выводить на странице? Когда мы просто картинку средствами php тдаём там всё понятно header отдаём файловый, потом сам файл и всё ок, но здесь header уже передан и это обычная страница или там стоит типа src="getimage.php?id=738" где уже php скрипт формирует и отдаёт каждую картинку?
а никак. Когда браузер будет по данному урлу запрашивать, пхп ему должен сформировать ответ с правильным контент-тайпом, так что перед началом отдачи - нужно будет полностью получить саму картинку из БД
Ответ написан
Комментировать
@helpik94
DevOps engineer в Containerum
Сначала делаете таблицу для хранения картинок:
create table testblob (
    image_id        tinyint(3)  not null default '0',
    image_type      varchar(25) not null default '',
    image           blob        not null,
    image_size      varchar(25) not null default '',
    image_ctgy      varchar(25) not null default '',
    image_name      varchar(50) not null default ''
);

Затем:
$imgData = file_get_contents($filename);
$size = getimagesize($filename);
mysql_connect("localhost", "$username", "$password");
mysql_select_db ("$dbname");
// mysqli 
// $link = mysqli_connect("localhost", $username, $password,$dbname); 
$sql = sprintf("INSERT INTO testblob
    (image_type, image, image_size, image_name)
    VALUES
    ('%s', '%s', '%d', '%s')",
   
    mysql_real_escape_string($size['mime']),
    mysql_real_escape_string($imgData),
    $size[3],
    mysql_real_escape_string($_FILES['userfile']['name'])
    );
mysql_query($sql);

Для отображения картинки на веб странице:
$link = mysql_connect("localhost", "username", "password");
mysql_select_db("testblob");
$sql = "SELECT image FROM testblob WHERE image_id=0";
$result = mysql_query("$sql");
header("Content-type: image/jpeg");
echo mysql_result($result, 0);
mysql_close($link);
Ответ написан
@kvg1956
Вопрос хранения графических файлов в MySQL можно решить другим образом: создать в файловой системе папку для графических файлов и после закачки их в эту папку записывать в базу MySQL имена этих файлов. Таким образом сервер базы данных не будет перегружаться. В общем-то, это еще и проще сделать. Могу, если есть необходимость, привести код.
Начинающий в области программирования с использованием MySQL
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы