Последние новости:

Поиск по сайту:

Исключить из наших наслаждений воображение — значит свести их на нет (М. Пруст).

PHP MySQL. BLOB

2 мин для чтения
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (2 оценок, среднее: 5,00 из 5)
Загрузка...
23.07.2019
PHP MySQL

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

Иногда по соображениям безопасности вам может потребоваться сохранить большие объекты данных, например изображения, файлы PDF и видео, в базе данных MySQL.

MySQL предоставляет тип BLOB, который может содержать большой объем данных. BLOB обозначает двоичный большой объект данных. Максимальное значение объекта BLOB определяется доступной памятью и размером пакета связи. Вы можете изменить размер коммуникационного пакета, используя переменную max_allowed_packet в MySQL и  post_max_size в настройках PHP.

Давайте посмотрим, как PHP PDO обрабатывает тип BLOB в MySQL.

Сначала мы создаем новую таблицу с именем files в примере базы данных для практики.

Таблица files содержит три колонки:

  • Столбец id — это первичный ключ , столбец автоинкремента.
  • Столбец MIME хранит тип файла MIME.
  • Столбец данных с типом данных BLOB, который используется для хранения содержимого файла.

Следующая инструкция CREATE TABLE создает таблицу files:

REATE TABLE files (
id   INT           AUTO_INCREMENT PRIMARY KEY,
mime VARCHAR (255) NOT NULL,
data BLOB          NOT NULL
);

<?php

/**
* PHP MySQL. Демонстрация BLOB
*/
class BobDemo {

const DB_HOST = 'localhost';
const DB_NAME = 'classicmodels';
const DB_USER = 'root';
const DB_PASSWORD = '';

/**
* Откройте соединение с базой данных
*/
public function __construct() {
// open database connection
$conStr = sprintf("mysql:host=%s;dbname=%s;charset=utf8", self::DB_HOST, self::DB_NAME);

try {
$this->pdo = new PDO($conStr, self::DB_USER, self::DB_PASSWORD);
// PHP 5.3.6
//$conn->exec("set names utf8");
} catch (PDOException $e) {
echo $e->getMessage();
}
}

/**
* закройте соединение с базой данных
*/
public function __destruct() {
// close the database connection
$this->pdo = null;
}

}

 

Во-вторых, мы определяем класс, вызываемый BlobDemo с помощью следующего кода:

В методе __construct() мы открываем соединение базы данных с базой данных MySQL , а в методе __destruct() закрываем соединение.

 

Вставка BLOB-данных в базу данных

PHP PDO предоставляет удобный способ работы с BLOB-данными с использованием потоков и подготовки операторов. Чтобы вставить содержимое файла в столбец BLOB, выполните следующие действия:

  • Сначала откройте файл для чтения в двоичном режиме.
  • Во-вторых, создайте оператор INSERT.
  • В-третьих, свяжите дескриптор файла с подготовленным оператором, используя метод bindParam(), и вызовите метод execute() для выполнения запроса.

Смотрите следующий метод insertBlob():

   /**
* вставка большого двоичного объекта в таблицу файлов
* @param string $filePath
* @param string $mime mimetype
* @return bool
*/
public function insertBlob($filePath, $mime) {
$blob = fopen($filePath, 'rb');

$sql = "INSERT INTO files(mime,data) VALUES(:mime,:data)";
$stmt = $this->pdo->prepare($sql);

$stmt->bindParam(':mime', $mime);
$stmt->bindParam(':data', $blob, PDO::PARAM_LOB);

return $stmt->execute();
}

 

Обратите внимание, что команда PDO::PARAM_LOB инструктирует PDO отображать данные в виде потока.

 

Обновить существующий столбец BLOB

Чтобы обновить столбец BLOB, используйте тот же метод, который описан при вставке данных в столбец BLOB. Смотрите следующий метод updateBlob():

   /**
* обновите таблицу файлов с помощью нового большого двоичного объекта из указанного файла
* by the filepath
* @param int $id
* @param string $filePath
* @param string $mime
* @return bool
*/
function updateBlob($id, $filePath, $mime) {

$blob = fopen($filePath, 'rb');

$sql = "UPDATE files
SET mime = :mime,
data = :data
WHERE id = :id;";

$stmt = $this->pdo->prepare($sql);

$stmt->bindParam(':mime', $mime);
$stmt->bindParam(':data', $blob, PDO::PARAM_LOB);
$stmt->bindParam(':id', $id);

return $stmt->execute();
}

 

Запрос данных из столбца BLOB

Следующие шаги описывают, как выбрать данные из столбца BLOB:

  • Сначала создайте оператор SELECT .
  • Во-вторых, свяжите соответствующий параметр, используя метод bindColumn() объекта PDOStatement.
  • В-третьих, выполнить заявление.

Смотрите следующий метод selectBlob():

   /**
* выберите данные из файлов
* @param int $id
* @return массив содержит данные типа mime и BLOB
*/
public function selectBlob($id) {

$sql = "SELECT mime,
data
FROM files
WHERE id = :id;";

$stmt = $this->pdo->prepare($sql);
$stmt->execute(array(":id" => $id));
$stmt->bindColumn(1, $mime);
$stmt->bindColumn(2, $data, PDO::PARAM_LOB);

$stmt->fetch(PDO::FETCH_BOUND);

return array("mime" => $mime,
"data" => $data);
}

 

PHP MySQL BLOB примеры

В следующих примерах мы будем использовать класс BlobDemo для сохранения изображения GIF и файла PDF в столбце BLOB в таблице files.

 

PHP MySQL BLOB с файлами изображений

Сначала мы вставляем двоичные данные из файла images/php-mysql-blob.gif в столбец BLOB таблицы files следующим образом:

$blobObj = new BlobDemo();

// тестирование вставки gif рисунока
$blobObj->insertBlob('images/php-mysql-blob.gif',"image/gif");

 

пример php mysql blob gif

 

Затем мы можем выбрать данные BLOB и отобразить их в виде изображения GIF:

$a = $blobObj->selectBlob(1);
header("Content-Type:" . $a['mime']);
echo $a['data'];


PHP MySQL. BLOB

 

PHP MySQL BLOB с файлами PDF

Следующий код вставляет содержимое файла pdf/php-mysql-blob.pdf с расширением PDF в столбец BLOB:

$blobObj = new BlobDemo();

// тестирование вставки pdf
$blobObj->insertBlob('pdf/php-mysql-blob.pdf',"application/pdf");

 

PHP MySQL. BLOB

 

Затем мы можем выбрать данные PDF и отобразить их в веб-браузере следующим образом:

$a = $blobObj->selectBlob(2);
header("Content-Type:" . $a['mime']);
echo $a['data'];

 

PHP MySQL. BLOB

 

Чтобы заменить файл PDF файлом изображения GIF, используйте метод updateBlob():

$blobObj->updateBlob(2, 'images/php-mysql-blob.gif', "image/gif");

$a = $blobObj->selectBlob(2);
header("Content-Type:" . $a['mime']);
echo $a['data'];

 

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Если статья понравилась, то поделитесь ей в социальных сетях:

Читайте также

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Статьи партнеров:

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить

Спасибо! Ваша заявка принята

close

Спасибо! Ваша заявка принята

close