Como Usar o MySQL Tipo de Dados BLOB para Armazenar Imagens com PHP no Ubuntu 18.04

O autor selecionou as Meninas Que Código para receber uma doação como parte da Gravação para o programa de Doações.

introdução

um objeto binário grande (BLOB) é um tipo de dados MySQL que pode armazenar dados binários, como imagens, multimídia e arquivos PDF.

ao criar aplicativos que exigem um banco de dados fortemente acoplado onde as imagens devem estar em sincronia com dados relacionados (por exemplo, um portal de funcionários, um banco de dados de alunos ou um aplicativo financeiro), você pode achar conveniente armazenar imagens como fotos e assinaturas de passaporte de alunos em um banco de dados MySQL junto com outras informações relacionadas.

é aqui que entra o tipo de dados MySQL BLOB. Essa abordagem de programação elimina a necessidade de criar um sistema de arquivos separado para armazenar imagens. O esquema também centraliza o banco de dados, tornando-o mais portátil e seguro porque os dados são isolados do sistema de arquivos. Criar backups também é mais simples, pois você pode criar um único arquivo de despejo MySQL que contém todos os seus dados.

recuperar dados é mais rápido e, ao criar registros, você pode ter certeza de que as regras de validação de dados e a integridade referencial são mantidas especialmente ao usar transações MySQL.

neste tutorial, você usará o tipo de dados MySQL BLOB para armazenar imagens com PHP no Ubuntu 18.04.

pré-requisitos

para acompanhar este guia, você precisará do seguinte:

  • um servidor Ubuntu 18.04 configurado usando a configuração inicial do servidor com Ubuntu 18.04 e um usuário não root com privilégios sudo.
  • Apache, MySQL e PHP configurados seguindo o guia sobre como instalar a pilha Linux, Apache, MySQL, PHP (LAMP) no Ubuntu 18.04. Para este tutorial, não é necessário criar hosts virtuais, para que você possa pular a Etapa 4.

Passo 1-Criando um banco de dados

você começará criando um banco de dados de amostra para o seu projeto. Para fazer isso, faça SSH no seu servidor e execute o seguinte comando para fazer login no seu servidor MySQL como root:

  • sudo mysql -u root -p

Digite a senha raiz do seu banco de dados MySQL e clique em ENTER para continuar.

em seguida, execute o seguinte comando para criar um banco de dados. Neste tutorial vamos nomeá-lo test_company:

  • CREATE DATABASE test_company;

uma Vez que o banco de dados é criado, você verá a seguinte saída:

Output
Query OK, 1 row affected (0.01 sec)

em seguida, crie uma test_user conta no servidor MySQL e lembre-se de substituir PASSWORD com uma senha forte:

  • CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'PASSWORD';

Você verá a seguinte saída:

Output
Query OK, 0 rows affected (0.01 sec)

Para conceder test_user cheio de privilégios no test_company banco de dados, executar:

  • GRANT ALL PRIVILEGES ON test_company.* TO 'test_user'@'localhost';

certifique-se de que você obter o seguinte resultado:

Output
Query OK, 0 rows affected (0.01 sec)

por fim, lave os privilégios de tabela para o MySQL para recarregar as permissões:

  • FLUSH PRIVILEGES;

Garantir que você verá a seguinte saída:

Output
Query OK, 0 rows affected (0.01 sec)

Agora que o e test_user estiver pronto, você vai passar para a criação de um products tabela para armazenar amostras de produtos. Você usará esta tabela mais tarde para inserir e recuperar registros para demonstrar como o MySQL BLOB funciona.

sair do servidor MySQL:

  • QUIT;

em seguida, faça login novamente com as credenciais do test_user que você criou:

  • mysql -u test_user -p

quando solicitado, digite a senha para o test_user e pressione ENTER para continuar. De seguida, alternar para o test_company banco de dados, digitando o seguinte:

  • USE test_company;

uma Vez que o test_company banco de dados é selecionada, o MySQL irá exibir:

Output
Database changed

em seguida, crie uma products tabela executando:

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

Este comando cria uma tabela chamada products. A tabela tem quatro colunas:

  • product_id: Esta coluna usa um tipo de dados BIGINT para acomodar uma grande lista de produtos até um máximo de 2 items3-1 itens. Você marcou a coluna como PRIMARY KEY para identificar produtos exclusivamente. Para que o MySQL manipule a geração de novos identificadores para colunas inseridas, você usou a palavra-chave AUTO_INCREMENT.

  • product_name: esta coluna contém os nomes dos produtos. Você usou o tipo de dados VARCHAR, pois esse campo geralmente lida com caracteres alfanuméricos até um máximo de 50—o limite de 50 é apenas um valor hipotético usado para o propósito deste tutorial.

  • price: para fins de demonstração, sua tabela products contém a coluna price para armazenar o preço de varejo dos produtos. Como alguns produtos podem ter valores flutuantes (por exemplo, 23.69, 45.36, 102.99), você usou o tipo de dados DOUBLE.

  • product_image: esta coluna usa um tipo de dados BLOB para armazenar os dados binários reais das imagens dos produtos.

você usou o armazenamento InnoDB ENGINE para a tabela para suportar uma ampla gama de recursos, incluindo transações MySQL. Depois de executar este procedimento para criar o products tabela, você verá a seguinte saída:

Output
Query OK, 0 rows affected (0.03 sec)

Registo de saída a partir do seu MySQL server:

  • QUIT;

Você vai obter o seguinte resultado

Output
Bye

O products tabela agora está pronto para armazenar alguns registros, incluindo produtos de imagens e você poderá preenchê-lo com alguns produtos na próxima etapa.

Etapa 2-criando Scripts PHP para conectar e preencher o banco de dados

nesta etapa, você criará um script PHP que se conectará ao banco de dados MySQL que você criou na Etapa 1. O script preparará três produtos de amostra e os inserirá na tabela products.

Para criar o código PHP, abra um novo arquivo com o seu editor de texto:

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

em Seguida, introduza as seguintes informações para o arquivo e substitua PASSWORD com o test_user senha que você criou na Etapa 1:

/var/www/html/config.php
<?phpdefine('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);

Salve e feche o arquivo.

neste arquivo, você usou quatro constantes PHP para se conectar ao banco de dados MySQL que você criou na Etapa 1:

  • DB_NAME : essa constante contém o nome do banco de dados test_company.

  • DB_USER : esta variável contém o nome de usuário test_user.

  • DB_PASSWORD : esta constante armazena o MySQL PASSWORD da conta test_user.

  • DB_HOST: isso representa o servidor onde o banco de dados reside. Nesse caso, você está usando o servidor localhost.

a linha a seguir em seu arquivo inicia um objeto de dados PHP (PDO) e se conecta ao banco de dados MySQL:

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

no final do arquivo, você definiu alguns atributos PDO:

  • ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION: Este atributo instrui o PDO a lançar uma exceção que pode ser registrada para fins de depuração.
  • ATTR_EMULATE_PREPARES, false: essa opção aumenta a segurança dizendo ao mecanismo de banco de dados MySQL para fazer o prepare em vez do PDO.

você incluirá o arquivo /var/www/html/config.php em dois scripts PHP que você criará a seguir para inserir e recuperar registros, respectivamente.

Primeiro, crie o /var/www/html/insert_products.php script PHP para inserir registros para a tabela produtos:

  • sudo nano /var/www/html/insert_products.php

em Seguida, adicione as seguintes informações em /var/www/html/insert_products.php arquivo:

/var/www/html/insert_products.php
<?phprequire_once 'config.php';$products = ;$products = ;$products = ;$products = ;$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";

Salve e feche o arquivo.

no arquivo, você incluiu o arquivo config.php na parte superior. Este é o primeiro arquivo que você criou para definir as variáveis do banco de dados e se conectar ao banco de dados. O arquivo também inicia um objeto PDO e o armazena em uma variável $pdo.

em seguida, você criou uma matriz de dados dos produtos a serem inseridos no banco de dados. Além dos product_name e price, que são preparados como strings e valores numéricos, respectivamente, o script usa a função file_get_contents embutida do PHP para ler imagens de uma fonte externa e passá-las como strings para a coluna product_image.

em seguida, você preparou uma instrução SQL e usou a instrução PHP foreach{...} para inserir cada produto no banco de dados.

para executar o arquivo /var/www/html/insert_products.php, execute-o na janela do navegador usando o seguinte URL. Lembre-se de substituir your-server-IP pelo endereço IP público do seu servidor:

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

Depois de executar o arquivo, você verá uma mensagem de sucesso, em seu navegador, confirmando registros foram inseridos no banco de dados.

uma mensagem de sucesso mostrando que os registros foram inseridos no banco de dados

você inseriu com sucesso três registros contendo imagens de produtos na tabela products. Na próxima etapa, você criará um script PHP para recuperar esses registros e exibi-los em seu navegador.

Etapa 3 — exibindo as informações dos produtos do banco de dados MySQL

com as informações e imagens dos produtos no banco de dados, agora você vai codificar outro script PHP que consulta e exibe as informações dos produtos em uma tabela HTML em seu navegador.

Para criar o arquivo, digite o seguinte:

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

em Seguida, digite as seguintes informações no arquivo:

/var/www/html/display_products.php
<html> <title>Using BLOB and MySQL</title> <body> <?php require_once 'config.php'; $sql = "SELECT * FROM products"; $stmt = $pdo->prepare($sql); $stmt->execute(); ?> <table border = '1' align = 'center'> <caption>Products Database</caption> <tr> <th>Product Id</th> <th>Product Name</th> <th>Price</th> <th>Product Image</th> </tr> <?php while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { echo '<tr>'; echo '<td>' . $row . '</td>'; echo '<td>' . $row . '</td>'; echo '<td>' . $row . '</td>'; echo '<td>' . '<img src = "data:image/png;base64,' . base64_encode($row) . '" width = "50px" height = "50px"/>' . '</td>'; echo '</tr>'; } ?> </table> </body></html>

Salve as alterações no arquivo e feche-o.

aqui você incluiu novamente o arquivo config.php para se conectar ao banco de dados. Em seguida, você preparou e executou uma instrução SQL usando PDO para recuperar todos os itens da tabela products usando o comando SELECT * FROM products.

em seguida, você criou uma tabela HTML e a preencheu com os dados dos produtos usando a instrução PHP while() {...}. A linha $row = $stmt->fetch(PDO::FETCH_ASSOC) consulta o banco de dados e armazena o resultado na variável $row como uma matriz multidimensional, que você exibiu em uma coluna de tabela HTML usando a sintaxe $row.

as imagens da coluna product_image estão incluídas dentro das tags <img src = "">. Você usou os atributos width e height para redimensionar as imagens para um tamanho menor que pode caber na coluna da tabela HTML.

para converter os dados realizada por BLOB tipo de dados para imagens, você usou a PHP base64_encode função e a seguinte sintaxe para os Dados de esquema de URI:

data:media_type;base64, base_64_encoded_data

neste caso, a image/png é o media_type e o Base64 string codificada a partir do product_image é a coluna base_64_encoded_data.

em seguida, executar o display_products.php arquivo em um navegador da web digitando o seguinte endereço:

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

Depois de executar o display_products.php arquivo no seu navegador, você verá uma tabela HTML com uma lista de produtos e imagens associadas.

lista de produtos do banco de dados MySQL

isso confirma que o script PHP para recuperar imagens do MySQL está funcionando conforme o esperado.

conclusão

neste guia, você usou o tipo de dados MySQL BLOB para armazenar e exibir imagens com PHP no Ubuntu 18.04. Você também viu as vantagens básicas de armazenar imagens em um banco de dados, em vez de armazená-las em um sistema de arquivos. Isso inclui portabilidade, segurança e facilidade de backup. Se você está construindo um aplicativo como um portal de alunos ou banco de dados de funcionários que requer informações e imagens relacionadas para serem armazenadas juntas, essa tecnologia pode ser de grande utilidade para você.

para obter mais informações sobre os tipos de dados suportados no MySQL, siga o guia Tipos de dados MySQL. Se você estiver interessado em mais conteúdo relacionado ao MySQL e PHP, confira os seguintes tutoriais:

  • Como Implementar a Paginação no MySQL com PHP no Ubuntu 18.04
  • Como Usar a Extensão PDO do PHP para Realizar Transações no MySQL PHP no Ubuntu 18.04

Leave a Reply

Deixe uma resposta

O seu endereço de email não será publicado.