Blob sql что это
Перейти к содержимому

Blob sql что это

  • автор:

ТИПЫ БОЛЬШИХ ДАННЫХ: BLOB и CLOB

До OpenEdge 10 работа с данными ограничивалась максимальным объемом 32K. В OpenEdge 10 были введены новые типы данных, которые позволили работать с объемами данных превышающие данное ограничение.

BLOB (Binary Large Object) — тип данных предназначен для хранение больших бинарных данных, таких как картинки, аудио — видео записи и т.д.

CLOB (Character Large Object) — тип данных предназначен для хранения больших текстовых данных заданной кодировки.

Третьим типом данных для работы с большими объемами данных, появившемся с OpenEdge 10 является тип LONGCHAR, но о нем мы уже говорили.

Стоит отметить, что в отличие от типа данных LONGCHAR, типы данных BLOB и CLOB могут быть определены только для полей таблиц и не могут быть определены для переменных.

РАБОТА С ТИПАМИ БОЛЬШИХ ДАННЫХ

COPY-LOB осуществляет копирование больших типов данных. При этом невозможно напрямую осуществлять копирование данных между типами BLOB и CLOB. Для этого необходимо скопировать данные из CLOB или BLOB источников в MEMPTR или LONGCHAR с преобразованием данных, а впоследствии уже осуществить копирование из MEMPTR или LONGCHAR в CLOB или BLOB .

COPY-LOB [FROM]source-lob | FILE source-filename>
[STARTING AT n] [FOR length]
TO target-lob> [OVERLAY AT n [TRIM]] |
FILE target-filename [APPEND]>
[NO-COVERT | CONVERT <[SOURCE CODEPAGE codepage]
[TARGET CODEPAGE codepage]>]
[NO-ERROR].

FROM — определяет источник данных для копирования:

[OBJECT] source-lob — определяет источник данных для копирования в качестве которого может выступать переменные MEMPTR или LONGCHAR типа, либо поля таблиц типов BLOB и CLOB.

FILE source-filename — определяет имя файла, содержимое которого необходимо скопировать.

STARTING AT n — определяет целочисленное значение позиции, с которой начинается чтение данных из источника. Если позиция не определена, то по умолчанию она принимается равное 1. Для байтовых типов данных таких как BLOB или MEMPTR стартовая позиция определяет позицию байта, а для текстовых типов, таких как CLOB или LONGCHAR — позицию символа с которого начинается чтение данных.

FOR length — определяет целочисленное значение байт для байтовых источников данных, или количество символов для текстовых типов, которое необходимо скопировать. По умолчанию, читаются все данные до конца.

ТО — определяет приемник копируемых данных:

[OBJECT] target-lob определяет приемник копируемых данных, в качестве которого могут выступать переменные MEMPTR или LONGCHAR типа, либо поля таблиц типов BLOB и CLOB.

OVERLAY AT n [TRIM] — определяет целочисленное значение позиции, с которой начинается вставка копируемых данных в источник. Если позиция не определена, то по умолчанию она принимается равное 1. Для байтовых типов данных, таких как BLOB или MEMPTR, стартовая позиция определяет позицию байта, а для текстовых типов, таких как CLOB или LONGCHAR — позицию символа с которого начинается вставка данных.

FILE target-filename [APPEND] — определяет имя файла, в который осуществляется копирование данных.

NO-CONVERT — не осуществлять конвертацию копируемых данных.

CONVERT <[SOURCE CODEPAGE codepage] [TARGET CODEPAGE codepage]> — осуществляет конвертацию копируемых данных.

Представленный ниже код загрузит содержимое файла test.xml в переменную iXML.

DEF VAR iXML AS LONGCHAR NO-UNDO.
COPY-LOB FROM FILE "./test.xml" TO iXML NO-CONVERT.

Blob для новичков

Программирование предусматривает обязательную работу с разными типами данных. Неграмотное использование типа данных может стать причиной критической ошибки. Поэтому важно уделить вопросу отдельное внимание.

В данной статье речь зайдет не о самом распространенном, но встречающемся на практике компоненте. А именно – blob. Он особо актуален для базы данных и двоичных записей.

Тип данных – это…

Типом данных принято называть множество значений и операций над ними. Класс информации, который характеризуется членами классами и операциями, которые к ним применяются (или могут быть задействованы).

Типом данных называют категоризацию абстрактного множества возможных параметров, значений и характеристик, а также набор манипуляций для того или иного атрибута. При помощи соответствующего элемента можно определить «итог» и смысл выражения, операции, способы хранения того или иного результата.

Классификация

Перед более детальным рассмотрение blob необходимо хорошо разобраться с «видами» данных в программировании. Существует следующая классификация соответствующих компонентов:

  1. Логический. Значение – только «истина» или «ложь».
  2. Целочисленный. Предусматривает хранение чисел (без знаков в том числе).
  3. С плавающей запятой. Представляют вещественные числа.
  4. Строковый. Отвечает за хранение всей строчки в переменной как единого целого.
  5. Указатели. Представлены переменными, диапазоны значений которых включают в себя адреса ячеек памяти или специального значения для обозначения того, что в текущий момент времени в переменной ничего не записано.
  6. Идентификационный. В коде будет интерпретироваться не как число. Это – уникальный идентификатор.

Также есть абстрактные типы данных, которые будут рассматриваться независимо от контекста и реализации в языке программирования.

Blob – определение

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

При помощи Blob можно хранить данные, которые не могут размещаться в полях иного типа. Сюда относят:

  • музыку;
  • аудиозаписи;
  • картинки;
  • анимацию;
  • иные компоненты.

Это – большой двоичный object. Он представляет строчку переменной длины, значение которой составляет до 2 147 483 647 символов. С кодовой страницей никак не связан, как и иные строчки соответствующего характера. Символьных данных такие компоненты не содержат.

Синтаксис

Blob – тип данных, который представлен самостоятельным объектом. Его достаточно легко использовать в программном коде. Длина будет указываться в байтах для соответствующих objects, если отсутствует один из суффиксов K, M или G. Они кратны соответственно:

  • 1024;
  • 1024*1024;
  • 1024*1024*1024.

Длина будет указываться в байтах для крупных двоичных объектов. Синтаксическая запись следующая:

По умолчанию двоичный объект – это 2 Гб. В Java при компиляции используется тип java.sql.Blob (или mysql). Для получения дескриптора большого двоичного объекта для базовых данных в Джаве необходимо использовать метод getBlob.

Чтобы создать поле type Blob в табличке, потребуется использовать запись типа:

Create table testBlob(

В ходе обработки запроса будет создана ячейка для хранения информации большого объема. Поля Blob по реализации внутри БД отличаются. Отличные от них «элементы» располагаются рядом. Blob хранит только идентификатор. Сам объект расположен на отдельной страничке. За счет такого приема обеспечивается хранение данных нефиксированного характера.

API и Blob

Blob – large binary data types. При работе с API выражен объект, подобный документу с неизменяемыми необработанными электронными материалами. Могут считываться как текст или двоичные сведения. Предусматривается преобразование в ReadableStream. Его методы применяются при обработке электронных материалов.

Blob-ы представляют разные сведения. Интерфейс File базируется на рассматриваемом объекте. Он наследует его функциональность, расширяя его со стороны пользователя.

Как использовать

Для создания соответствующих объектов и сведений нужно задействовать конструктор Blob(). Для создания «блоба» из подмножества информации из другого blob’а требуется метод slice(). Получить рассматриваемый компонент для файла на файловой пользовательской системе поможет документация File.

Стоит обратить внимание на то, что:

  1. Метод slice() обладает изначально задаваемой длинной во втором аргументе. Это необходимо для указания байт в новом Blob’е. При указании соответствующих параметров start + length, превышающий размер изначального «блоба», возвращаемый компонент будет включать в себя информацию от начального индекса до конца исходного object.
  2. Slice() – метод, имеющий сторонние префиксы в некоторых браузерах.
  3. Старая версия упомянутого метода без посторонних приставок работает не так, как актуальная.

Этой информации достаточно на начальных порах, чтобы понимать основы работы с рассматриваемым типом данных.

Свойства и методы

  1. Blob.isClosed – показывает, закрывался ли метод close(). Закрытый объект не читается.
  2. .size – размер данных в объекте. Указан в байтах.
  3. .type – строчка с MIME-типом, содержащихся в Blob. Если «вид» неизвестен, строчка окажется пустой.
  1. Blob.close() – закрытие объекта. По возможности система освободит занятые им ресурсы.
  2. .slice([start[…,end[…, contentType]]]) – осуществляет возврат нового объекта, который содержит информацию в указанном диапазоне байтов исходного «блоба».
  3. .stream – возвращает ReadableStream. Он может применяться для чтения содержимого соответствующего объекта.
  4. .text – возвращает promise, исполняемый с USVString. Он содержит все из «блоба», интерпретируемое как текст UTF-8.

Ниже – примеры того, как можно использовать тип данных Blob:

Чтобы лучше разбираться в Blob, можно посмотреть разнообразные туториалы . А специализированные дистанционные курсы помогут быстрее влиться в основы программирования. Меньше чем за год пользователя научат с нуля писать программы на JS и иных языках, работать с БД и многому другому. Полученный спектр знаний подтвердит электронный сертификат.

Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в Otus !

Использование типа данных MySQL BLOB для хранения изображений с PHP в Ubuntu 18.04

Использование типа данных MySQL BLOB для хранения изображений с PHP в Ubuntu 18.04

Большие двоичные объекты ( BLOB ) — это тип данных MySQL для хранения двоичных данных, таких как изображения, мультимедийные файлы и файлы PDF.

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

Для этой цели будет полезен тип данных MySQL BLOB . Такой подход к программированию устраняет необходимость создания отдельной файловой системы для хранения изображений. Такая схема также обеспечивает централизацию базы данных, делая ее более портативной и безопасной за счет изоляции данных от файловой системы. Создавать резервные копии также будет проще, поскольку для этого достаточно будет создать один файл дампа MySQL, где будут храниться все ваши данные.

В этом обучающем модуле мы используем тип данных MySQL BLOB для сохранения изображений в коде PHP в Ubuntu 18.04.

Предварительные требования

Для выполнения этого обучающего модуля вам потребуется следующее:

  • Сервер Ubuntu 18.04, настроенный в соответствии с указаниями руководства Начальная настройка сервера Ubuntu 18.04 и пользователь без прав root с привилегиями sudo .
  • Apache, MySQL и PHP, установленные в соответствии с указаниями руководства «Установка комплекта Linux, Apache, MySQL, PHP (LAMP) в Ubuntu 18.04». Для этого обучающего модуля необязательно создавать виртуальные хосты, поэтому вы можете пропустить шаг 4.

Шаг 1 — Создание базы данных

Для начала создайте тестовую базу данных для своего проекта. Для этого подключитесь к серверу через SSH и запустите следующую команду для входа на сервер MySQL с привилегиями root:

Введите пароль пользователя root для вашей базы данных MySQL и нажмите ENTER , чтобы продолжить.

Затем запустите следующую команду для создания базы данных. В этом обучающем модуле мы назовем базу данных test_company :

После создания базы данных вы увидите следующее:

Output
Query OK, 1 row affected (0.01 sec)

Затем создайте учетную запись test_user на сервере MySQL и обязательно замените PASSWORD на надежный пароль:

Вывод должен выглядеть так:

Output
Query OK, 0 rows affected (0.01 sec)

Чтобы предоставить пользователю test_user полные права доступа к базе данных test_company , выполните команду:

Вы должны увидеть следующее:

Output
Query OK, 0 rows affected (0.01 sec)

Очистите таблицу прав доступа, чтобы СУБД MySQL перезагрузила разрешения:

На экран должно быть выведено следующее:

Output
Query OK, 0 rows affected (0.01 sec)

Мы подготовили базу данных test_company и пользователя test_user . Теперь мы можем перейти к созданию таблицы products для сохранения образцов продуктов. Позднее мы используем эту таблицу для вставки и получения записей, чтобы продемонстрировать работу объектов MySQL BLOB .

Выполните выход из сервера MySQL:

Снова войдите в систему под учетными данными созданного пользователя test_user :

Введите в диалоге пароль пользователя test_user и нажмите ENTER , чтобы продолжить. Переключитесь на базу данных test_company с помощью следующей команды:

После выбора базы данных test_company MySQL выведет на экран следующее:

Output
Database changed

Затем создайте таблицу products , запустив команду:

Эта команда создает таблицу с именем products . В таблице имеется четыре столбца:

  • product_id : в этом столбце используется тип данных BIGINT , за счет чего обеспечивается поддержка больших списков продуктов, где может содержаться до 2⁶³-1 элементов. Вы пометили столбец как PRIMARY KEY для уникальной идентификации продуктов. Чтобы MySQL обрабатывала генерирование новых идентификаторов для вставленных столбцов, вы использовали ключевое слово AUTO_INCREMENT .
  • product_name : в этом столбце хранятся названия продуктов. Мы использовали тип данных VARCHAR , поскольку это поле обычно обрабатывает не более 50 бувенно-числовых символов. Предел в 50 символов — это гипотетическое значение, используемое для целей этого обучающего модуля.
  • price : для демонстрационных целей мы добавили в таблицу products столбец price для хранения информации о розничной цене продуктов. Поскольку некоторые продукты могут иметь значения с плавающей запятой (например, 23.69, 45.36, 102.99), мы использовали тип данных DOUBLE .
  • product_image : в этом столбце данные типа BLOB используются для хранения двоичных данных изображений продуктов.

Мы использовали для таблицы InnoDB , СИСТЕМУ ХРАНЕНИЯ , поддерживающую широкий набор функций, включая транзакции MySQL. После выполнения этой команды для создания таблицы products вы увидите на экране следующее:

Output
Query OK, 0 rows affected (0.03 sec)

Выполните выход с сервера MySQL:

Вы увидите следующее

Output
Bye

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

Шаг 2 — Создание скриптов PHP для подключения к базе данных и ее заполнения

На этом шаге мы создадим скрипт PHP для подключения к базе данных MySQL, созданной нами на шаге 1. Этот скрипт подготовит три образца продуктов и вставит их в таблицу products .

Для создания кода PHP откройте новый файл в текстовом редакторе:

Введите в файл следующую информацию и замените PASSWORD паролем пользователя test_user , созданным на шаге 1:

/var/www/html/config.php

 define('DB_NAME', 'test_company'); define('DB_USER', 'test_user'); define('DB_PASSWORD', 'PASSWORD'); define('DB_HOST', 'localhost'); $pdo = new PDO("mysql:host=" . DB_HOST . "; dbname=" . DB_NAME, DB_USER, DB_PASSWORD); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 

Сохраните и закройте файл.

В этом файле мы использовали четыре константы PHP для подключения к базе данных MySQL, созданной на шаге 1:

  • DB_NAME : эта константа хранит название базы данных test_company .
  • DB_USER : эта переменная хранит имя пользователя test_user .
  • DB_PASSWORD : эта константа хранит ПАРОЛЬ MySQL для учетной записи test_user .
  • DB_HOST : сервер, где располагается база данных. В данном случае мы используем сервер localhost .

Следующая строка в вашем файле инициирует объект данных PHP (PDO) и выполняет подключение к базе данных MySQL:

. $pdo = new PDO("mysql:host=" . DB_HOST . "; dbname=" . DB_NAME, DB_USER, DB_PASSWORD); . 

Ближе к концу файла мы зададим пару атрибутов PDO:

  • ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION : этот атрибут предписывает PDO выдать исключение, которое можно зарегистрировать для целей отладки.
  • ATTR_EMULATE_PREPARES, false : эта опция повышает безопасности, предписывая СУБД MySQL выполнять подготовку вместо PDO.

Мы добавим файл /var/www/html/config.php в два скрипта PHP для вставки и получения записей, которые мы сейчас создадим.

Вначале создайте скрипт PHP /var/www/html/insert_products.php для вставки записей в таблицу products:

Затем добавьте следующую информацию в файл /var/www/html/insert_products.php :

/var/www/html/insert_products.php

 require_once 'config.php'; $products = []; $products[] = [ 'product_name' => 'VIRTUAL SERVERS', 'price' => 5, 'product_image' => file_get_contents("https://i.imgur.com/VEIKbp0.png") ]; $products[] = [ 'product_name' => 'MANAGED KUBERNETES', 'price' => 30, 'product_image' => file_get_contents("https://i.imgur.com/cCc9Gw9.png") ]; $products[] = [ 'product_name' => 'MySQL DATABASES', 'price' => 15, 'product_image' => file_get_contents("https://i.imgur.com/UYcHkKD.png" ) ]; $sql = "INSERT INTO products(product_name, price, product_image) VALUES (:product_name, :price, :product_image)"; foreach ($products as $product)  $stmt = $pdo->prepare($sql); $stmt->execute($product); > echo "Records inserted successfully"; 

Сохраните и закройте файл.

Вы добавили файл config.php в верхней части файла. Это первый файл, который вы создали для определения переменных базы данных и подключения к базе данных. Также этот файл инициирует объект PDO и сохраняет его в переменной $pdo .

Далее вы создали массив данных о продуктах, которые нужно вставить в базу данных. Помимо значений product_name и price , подготовленных в виде текстовых и числовых значений соответственно, данный скрипт использует встроенную функцию PHP file_get_contents для чтения изображений из внешнего источника и передачи их в виде строк в столбец product_image .

Затем вы подготовили выражение SQL и использовали выражение PHP foreach <. >для вставки каждого продукта в базу данных.

Для выполнения файла /var/www/html/insert_products.php запустите его в окне браузера, используя следующий URL. Замените your-server-IP публичным IP-адресом вашего сервера:

http://your-server-IP/insert_products.php 

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

Сообщение об успешной вставке записей в базу данных

Вы успешно вставили три записи с изображениями продуктов в таблицу products . На следующем шаге мы создадим скрипт PHP для извлечения этих записей и их вывода в браузере.

Шаг 3 — Отображение информации о продуктах из базы данных MySQL

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

Для создания файла введите следующее:

Затем введите в файл следующую информацию:

/var/www/html/display_products.php

html> title>Using BLOB and MySQLtitle> body>  require_once 'config.php'; $sql = "SELECT * FROM products"; $stmt = $pdo->prepare($sql); $stmt->execute(); ?> table border = '1' align = 'center'> caption>Products Databasecaption> tr> th>Product Idth> th>Product Nameth> th>Priceth> th>Product Imageth> tr>  while ($row = $stmt->fetch(PDO::FETCH_ASSOC))  echo ''; echo '' . $row['product_id'] . ''; echo '' . $row['product_name'] . ''; echo '' . $row['price'] . ''; echo '' . ' ' . ''; echo ''; > ?> table> body> html> 

Сохраните изменения в файле и закройте его.

Здесь мы опять использовали файл config.php для подключения к базе данных. Затем мы подготовили и выполнили команду SQL, используя PDO для извлечения всех элементов из таблицы products с помощью команды SELECT * FROM products .

Затем мы создали таблицу HTML и заполнили ее данными о продуктах, используя выражение PHP while() <. >. Строка $row = $stmt->fetch(PDO::FETCH_ASSOC) отправляет запрос в базу данных и сохраняет результат в переменной $row как многомерный массив, который затем отображается как столбец таблицы HTML с использованием синтаксиса $row[‘column_name’] .

Изображения из столбца product_image заключены в теги . Мы использовали атрибуты width и height для уменьшения ширины и высоты изображений, чтобы они поместились в столбце таблицы HTML.

Чтобы конвертировать данные, хранящиеся в объекте типа BLOB , обратно в изображения, мы использовали встроенную функцию PHP base64_encode и следующий синтаксис схемы URI данных:

data:media_type;base64, base_64_encoded_data 

В данном случае image/png — это значение параметра media_type (тип файла), а закодированная строка Base64 из столбца product_image — это данные base_64_encoded_data .

Выполните в браузере файл display_products.php , введя следующий адрес:

http://your-server-IP/display_products.php 

Запустив в браузере файл display_products.php , вы увидите таблицу HTML со списком продуктов и связанных с ними изображений.

Список продуктов из базы данных MySQL

Это подтверждает, что скрипт PHP для извлечения изображений из базы данных MySQL работает ожидаемым образом.

Заключение

В этом обучающем модуле мы использовали тип данных MySQL BLOB для хранения и вывода изображений в коде PHP в Ubuntu 18.04. Мы увидели основные преимущества хранения изображений в базе данных по сравнению с их хранением в файловой системе. В число этих преимуществ входят портативность, безопасность и удобство резервного копирования. Эта технология будет вам полезна, если вы создаете приложение, для которого требуется хранить информацию и изображения вместе, например, студенческий портал или базу данных сотрудников.

Дополнительную информацию о поддерживаемых типах данных в MySQL можно найти в руководстве по типам данных MySQL. Если вас интересуют дополнительные материалы по MySQL и PHP, пройдите следующие обучающие модули:

  • Применение постраничного ввода данных в MySQL с PHP в Ubuntu 18.04​​​
  • Использование расширения PDO PHP для выполнения транзакций MySQL на PHP в Ubuntu 18.04

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Как хранить изображения в MySQL с помощью BLOB

BLOB (или Binary Large Object, большой двоичный объект) – это тип данных MySQL, который позволяет хранить двоичные данные: изображения, мультимедиа и файлы PDF.

Хранить изображения (такие как фотографии и подписи) в базе данных MySQL вместе с другой информацией удобно в том случае, если вы разрабатываете приложения с сильной привязкой к БД (например, портал поиска работы, база данных студентов или финансовое приложение), и в этой БД изображения должны быть синхронизированы с другими данными.

И тогда на помощь приходит тип данных BLOB. Этот подход устраняет необходимость в создании отдельной файловой системы для хранения изображений, а также централизует базу данных, делая ее более портативной и надежной, поскольку данные изолированы от файловой системы. А еще это упрощает создание резервных копий, поскольку вы можете создать один дамп MySQL, содержащий все ваши данные.

Извлечение данных обрабатывается быстрее, а при создании новых записей вы можете быть уверены, что правила проверки данных и ссылочная целостность четко соблюдены (особенно при использовании транзакций MySQL).

В этом мануале мы расскажем о том, как использовать тип данных BLOB для хранения изображений с помощью PHP.

Требования

  • Сервер Ubuntu 18.04, предварительно настроенный согласно этим инструкциям.
  • Стек LAMP, установленный на вашем сервере. С установкой вам поможет этот мануал (раздел о виртуальных хостах можно пропустить, здесь мы не будем их использовать).

1: Создание базы данных

Давайте начнем с создания тестовой базы данных для этого проекта. Подключитесь к серверу по SSH, а затем выполните следующую команду, чтобы войти на сервер MySQL как пользователь root:

sudo mysql -u root -p

Введите root-пароль базы данных MySQL и нажмите Enter, чтобы продолжить.

После этого выполните следующую команду, чтобы создать базу данных. В этом руководстве мы назовем ее test_company:

CREATE DATABASE test_company;

После создания БД вы увидите следующее:

Query OK, 1 row affected (0.01 sec)

Теперь нам нужно создать на сервере MySQL учетную запись test_user; не забудьте заменить PASSWORD сложным паролем:

CREATE USER ‘test_user’@’localhost’ IDENTIFIED BY ‘PASSWORD’;

Вы получите следующий результат:

Query OK, 0 rows affected (0.01 sec)

Чтобы предоставить пользователю test_user полные права доступа к базе данных test_company, запустите команду:

GRANT ALL PRIVILEGES ON test_company.* TO ‘test_user’@’localhost’;

Вы должны получить следующий результат:

Query OK, 0 rows affected (0.01 sec)

В завершение нужно сбросить таблицы привилегий, чтобы MySQL перезагрузил права:

На экране должно появиться:

Query OK, 0 rows affected (0.01 sec)

Теперь, когда база данных test_company и пользователь test_user готовы, мы можем перейти к созданию таблицы. Предположим, нам нужна таблица products для хранения списка товаров. Позже мы попробуем вставить и извлечь данные из этой таблицы, чтобы понять, как работает BLOB в MySQL.

Выйдите из оболочки MySQL:

Затем снова войдите в систему, на этот раз – как пользователь test_user:

mysql -u test_user -p

При появлении запроса введите пароль test_user и нажмите Enter, чтобы продолжить. Затем откройте базу данных test_company, набрав команду:

Перейдя в базу данных test_company, MySQL отобразит такой результат:

Затем создайте таблицу products:

CREATE TABLE `products` (product_id BIGINT PRIMARY KEY AUTO_INCREMENT, product_name VARCHAR(50), price DOUBLE, product_image BLOB) ENGINE = InnoDB;

Эта команда создаст таблицу по имени products. В таблице будет четыре столбца:

  • product_id: в этом столбце используется тип данных BIGINT, он позволяет вместить большой список продуктов, содержащий 2⁶³-1 элементов. Мы пометили столбец как PRIMARY KEY, чтобы присвоить товарам уникальные идентификаторы. Чтобы MySQL мог обрабатывать создание новых идентификаторов, мы использовали ключевое слово AUTO_INCREMENT.
  • product_name: этот столбец содержит названия товаров. Здесь мы использовали тип данных VARCHAR, так как это поле обычно обрабатывает буквенно-цифровые значения длиной до 50 символов; ограничение в 50 символов – это всего лишь гипотетическое значение, используемое для целей этого руководства.
  • price: этот столбец содержит розничные цены наших товаров. Поскольку цена на некоторые товары может выражаться числом с плавающей точкой (например, 23.69, 45.36, 102.99), мы указали здесь тип данных DOUBLE.
  • product_image: в этом столбце мы указали тип данных BLOB, поскольку он предназначен для хранения двоичных данных – изображений товаров.

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

Query OK, 0 rows affected (0.03 sec)

Выйдите из сервера MySQL:

Вы получите сообщение:

Таблица products готова. Вы можете использовать ее для хранения некоторых записей, включая изображения продуктов. Скоро мы заполним ее данными.

2: Создание PHP-скрипта для заполнения базы данных

На этом этапе мы создадим сценарий PHP, который будет подключаться к базе данных MySQL, созданной в первом разделе руководства. Сценарий подготовит три записи о товарах и вставит их в таблицу products.

Чтобы создать PHP-скрипт, откройте новый файл в текстовом редакторе:

sudo nano /var/www/html/config.php

Затем вставьте в него следующую информацию (замените PASSWORD паролем test_user, который вы создали в разделе 1):

$pdo = new PDO(«mysql:host=» . DB_HOST . «; dbname https://i.imgur.com/VEIKbp0.png»)

‘product_name’ => ‘MANAGED KUBERNETES’,

‘product_name’ => ‘MySQL DATABASES’,

$sql = «INSERT INTO products(product_name, price, product_image) VALUES (:product_name, :price, :product_image)»;

foreach ($products as $product)

echo «Records inserted successfully»;

Сохраните и закройте файл.

Этот файл нужен для определения переменных базы данных и подключения к ней. Файл также инициирует объект PDO и сохраняет его в переменной $pdo. Мы ссылаемся на файл config.php вверху.

Затем мы создали массив данных о товарах, которые нужно вставить в БД. Помимо product_name и price, которые заданы в виде строк и числовых значений соответственно, сценарий использует встроенную функцию PHP file_get_contents для чтения изображений из внешнего источника и передачи их в виде строк в столбец product_image.

После этого мы подготовили оператор SQL и использовали оператор PHP foreach для вставки каждого продукта в базу данных.

Запустите /var/www/html/insert_products.php в окне браузера, используя следующий URL-адрес (не забудьте заменить your-server-IP внешним IP-адресом сервера):

На экране вы увидите сообщение об успешном выполнении файла – следовательно, записи были вставлены в базу данных.

Records inserted successfully

Итак, мы успешно вставили три записи, содержащие изображения товаров, в таблицу. На следующем этапе мы напишем сценарий PHP для извлечения этих записей и отображения их в браузере.

3: Извлечение и визуализация данных из БД MySQL

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

Чтобы создать файл, введите:

sudo nano /var/www/html/display_products.php

Затем вставьте в файл следующее:

Using BLOB and MySQL

$sql = «SELECT * FROM products»;

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *