Версия для печати

Сохранение изображений в базе данных MySQL

В этой статье я расскажу, как сохранять двоичные данные, такие как изображения в базе данных MySQL. Вы узнаете, как передать данные через HTML-форму в базу данных, извлекать и выводить их пользователю.

Прежде всего, Вы должны создать новую базу данных, для хранения бинарных данных. Для примера используется следующая таблица. Зайдите в phpMyAdmin, скопируйте и вставьте ниже приведённый код:

CREATE TABLE binary_data (
id INT(4) NOT NULL AUTO_INCREMENT PRIMARY KEY,
description CHAR(50),
bin_data LONGBLOB,
filename CHAR(50),
filesize CHAR(50),
filetype CHAR(50)
);
 

Пример php скрипта для сохранения данных в базе данных

Скрипт store.php сохраняет изображение в базу данных переданное через html форму.
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  2. <html>
  3. <head>
  4. <m-eta http-equiv="content-type" content="text/html; charset=utf-8">
  5. <t-itle>Сохранение бинарных данных в базе данных MySQL</title>
  6. </head>
  7. <body>
  8. <?php
  9.  
  10. // Код, который будет выполняться, если форма была оправлена:
  11. if ($_POST['submit']) {
  12.  
  13. // подключение к базе данных
  14. // (возможно, вам придется настроить имя хоста, имя пользователя и пароль)
  15. $dbh = new mysqli("localhost", "root", "", "imagesstore");
  16.  
  17. {
  18. exit("Ошибка подключения к базе данных MySQL: Сервер база данных не доступен!<br>
  19. Проверте параметры подключения к базе данных.");
  20. }
  21.  
  22. $data = addslashes(fread(fopen($_FILES['file']['tmp_name'], "r"),
  23. filesize($_FILES['file']['tmp_name'])));
  24.  
  25. $_POST['form_description'] = trim($_POST['form_description']);
  26. $size = filesize ($_FILES['file']['tmp_name']);
  27.  
  28. $result=$dbh->prepare("INSERT INTO binary_data (description,bin_data,filename,filesize,filetype)
  29. "."VALUES ('".$_POST['form_description']."',
  30. '".$data."',
  31. '".$_FILES["file"]["name"]."',
  32. '".$size."',
  33. '".$_FILES["file"]["type"]."')");
  34.  
  35. if(!$result) exit("Ошибка выполнения SQL запроса!");
  36.  
  37. $result->execute();
  38. $id = $dbh->prepare();
  39.  
  40. echo "<p>Этот файл имеет следующий идентификатор (ID) в базе данных: <b>".$id."</b>";
  41.  
  42. } else {
  43.  
  44. // отображаем форму для оправки новых данных:
  45. ?>
  46.  
  47. <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data">
  48. Описание файла: <input type="text" name="form_description" size="40">
  49. <input type="hidden" name="MAX_FILE_SIZE" value="1000000">
  50. Файл для загрузки/хранения в базе данных: <input type="file" name="file" size="40">
  51. <p><input type="submit" name="submit" value="Отправить">
  52. </form>
  53. <?php
  54.  
  55. }
  56.  
  57. ?>
  58. </body>
  59. </html>

При выполнении скрипта Вы увидите простую html форму. Для выбора файла (например, изображение) используйте кнопку "Обзор". Затем нажмите кнопку "Отправить". После загрузки файла на веб-сервер скрипт сообщит вам его идентификатор базы данных (ID). ID необходим для получения доступа к информации (при помощи следующего скрипта). Пример php скрипта для вывода изображений в браузер Скрипт getdata.php – это пример скрипта, который извлекает двоичную информацию из базы данных и передает её непосредственно пользователю. getdata.php

  1. <?php
  2.  
  3. if(!preg_match("|^[\d]*$|",$_GET['id'])) exit();
  4.  
  5. // подключение к базе данных
  6. // (возможно, вам придется настроить имя хоста, имя пользователя и пароль)
  7. $dbh = new mysqli("localhost", "root", "", "imagesstore");
  8.  
  9. {
  10. exit("Ошибка подключения к базе данных MySQL: Сервер база данных не доступен!<br>
  11. Проверте параметры подключения к базе данных.");
  12. }
  13.  
  14. $query = "SELECT bin_data,filetype from binary_data WHERE id=".$_GET['id'];
  15. $result = $dbh->query($query);
  16.  
  17. if(!$result) exit("Ошибка выполнения SQL запроса!");
  18.  
  19. $row = $result->fetch_array();
  20.  
  21. Header( "Content-type: ".$row['filetype']."");
  22. echo $row['bin_data'];
  23.  
  24. ?>

Поскольку скрипту необходимо "знать", который файл извлекать, в качестве параметра необходимо указать его ID. Например: Файл сохранен в базе данных под ID 2. Для получения этого файла необходимо вызвать:

getdata.php?id=2

Если в базе данных сохранены изображения, на вашей веб-странице можно использовать скрипт getdata, как например : Например: В базе данных вы сохранили изображение как ID 3 и хотите, чтобы оно отобразилось на вашей веб-странице. Для этого воспользуйтесь следующим кодом:

Пару полезных советов.

Как сохранить файл, размер которого больше 2 Mб?

Для загрузки и сохранения файлов, чей размер превышает 2 Мб, необходимо внести несколько изменений в скрипт и php/sql настройки в связи с установленными по умолчанию ограничениями. Для хранения файлов размером 2 Мб следует сделать следующее:

Внесите изменения в скрипт store.php. Поменяйте значение MAX_FILE_SIZE на 24000000;

По умолчанию php позволяет передовать файлы размером не более 2 Мб. Необходимо изменить переменную максимального размера файла на 24M. Это можно сделать в php.ini в дириктиве setting upload_max_filesize или в .htaccess прописать строчку php_value upload_max_filesize 24M. В конфигурационных файле apache прописать LimitRequestBody 24000000.

По умолчанию в mysql можно импортировать файлы размером не более 2 Мб. Чтобы снять ограничения размера пакета в mysql, выполните слудующие действия. Откройте файл настройки my.ini, измените строчку innodb_additional_mem_pool_size = 24M

Чтобы изменения вступили в силу, перезагрузите веб сервер Apache и сервер базы данных MySQL.

Понравилась статья?


Прочитано 28118 раз