PHP MySQL BLOB

Resumo : neste tutorial, você aprenderá como lidar com dados BLOB usando PHP PDO. Mostraremos como inserir, atualizar e selecionar dados BLOB em bancos de dados MySQL.

Blob PHP MySQL

Às vezes, por motivos de segurança, pode ser necessário armazenar grandes objetos de dados, como imagens, arquivos PDF e vídeos, no banco de dados MySQL.

MySQL fornece o tipo de dados BLOB que pode armazenar uma grande quantidade de dados binários.

BLOB significa objeto binário de grandes dados. O valor máximo de um objeto BLOB é especificado pela memória disponível e pelo tamanho do pacote de comunicação. Você pode alterar o tamanho do pacote de comunicação usando a  max_allowed_packetvariável no MySQL e  post_max_sizenas configurações do PHP.

Vamos ver como o PHP PDO lida com o tipo BLOB no MySQL.

Primeiro, crie uma nova tabela com o nome filespara praticar.

A filestabela contém três colunas:

  • A idcoluna é a chave primária , coluna de incremento automático .
  • A mimecoluna armazena o tipo MIME do arquivo.
  • A datacoluna cujo tipo de dados é o BLOB usado para armazenar o conteúdo do arquivo.

A seguinte instrução CREATE TABLE cria a filestabela:

CREATE TABLE files (
    id   INT           AUTO_INCREMENT PRIMARY KEY,
    mime VARCHAR (255) NOT NULL,
    data BLOB          NOT NULL
);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Segundo, defina uma classe chamada BlobDemocom o seguinte código:

<?php

/**
 * PHP MySQL BLOB Demo
 */
class BlobDemo {

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

    /**
     * Open the database connection
     */
    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);
            //for prior PHP 5.3.6
            //$conn->exec("set names utf8");
        } catch (PDOException $e) {
            echo $e->getMessage();
        }
    }

    /**
     * close the database connection
     */
    public function __destruct() {
        // close the database connection
        $this->pdo = null;
    }

}Linguagem de código:  PHP  ( php )

No __construct()método, abrimos uma conexão de banco de dados com o banco de dados MySQL e, no  __destruct()método, fechamos a conexão.

Insira dados BLOB no banco de dados

PHP PDO fornece uma maneira conveniente de trabalhar com dados BLOB usando streams e instruções de preparação.

Para inserir o conteúdo de um arquivo em uma coluna BLOB, siga os passos abaixo:

  • Primeiro, abra o arquivo para leitura em modo binário.
  • Segundo, construa uma instrução INSERT .
  • Terceiro, vincule o identificador do arquivo à instrução preparada usando o   bindParam()método e chame o  execute()método para executar a consulta.

Veja o seguinte  insertBlob()método:

   /**
     * insert blob into the files table
     * @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();
    }Linguagem de código:  PHP  ( php )

Observe que o  PDO::PARAM_LOBDOP instrui a mapear os dados como um fluxo.

Atualizar uma coluna BLOB existente

Para atualizar uma coluna BLOB, use a mesma técnica descrita na inserção de dados em uma coluna BLOB. Veja o seguinte  updateBlob()método:

   /**
     * update the files table with the new blob from the file specified
     * 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();
    }Linguagem de código:  PHP  ( php )

Consultar dados da coluna BLOB

As etapas a seguir descrevem como selecionar dados de uma coluna BLOB:

  • Primeiro, construa uma instrução SELECT .
  • Segundo, vincule o parâmetro correspondente usando o  bindColumn()método do PDOStatementobjeto.
  • Terceiro, execute a instrução.

Veja o seguinte  selectBlob()método:

    /**
     * select data from the the files
     * @param int $id
     * @return array contains mime type and BLOB data
     */
    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);
    }Linguagem de código:  PHP  ( php )

Exemplos de BLOBs PHP MySQL

Nos exemplos a seguir, usaremos a BlobDemoclasse para salvar uma imagem GIF e um arquivo PDF na coluna BLOB da filestabela.

PHP MySQL BLOB com arquivos de imagem

Primeiro, inserimos dados binários do images/php-mysql-blob.gifarquivo na coluna BLOB da filestabela da seguinte forma:

$blobObj = new BlobDemo();

// test insert gif image
$blobObj->insertBlob('images/php-mysql-blob.gif',"image/gif");Linguagem de código:  PHP  ( php )
exemplo de gif de blob php mysql

Então, podemos selecionar os dados BLOB e exibi-los como uma imagem GIF:

$a = $blobObj->selectBlob(1);
header("Content-Type:" . $a['mime']);
echo $a['data'];Linguagem de código:  PHP  ( php )
php mysql blob renderizar imagem gif

PHP MySQL BLOB com arquivos PDF

O código a seguir insere o conteúdo do  pdf/php-mysql-blob.pdfarquivo PDF na coluna BLOB:

$blobObj = new BlobDemo();

// test insert pdf
$blobObj->insertBlob('pdf/php-mysql-blob.pdf',"application/pdf");Linguagem de código:  PHP  ( php )
exemplo de php mysql blob pdf

Em seguida, podemos selecionar os dados do PDF e renderizá-los no navegador da seguinte forma:

$a = $blobObj->selectBlob(2);
header("Content-Type:" . $a['mime']);
echo $a['data'];Linguagem de código:  PHP  ( php )
php mysql blob renderizar PDF

Para substituir o arquivo PDF pelo arquivo de imagem GIF, use o  updateBlob()método a seguir:

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

$a = $blobObj->selectBlob(2);
header("Content-Type:" . $a['mime']);
echo $a['data'];Linguagem de código:  PHP  ( php )

Você pode baixar o código fonte deste tutorial através do seguinte link:

Baixe o código-fonte PHP MySQL BLOB

Neste tutorial, você aprendeu como gerenciar dados BLOB do MySQL, incluindo inserção, atualização e consulta de blob.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *