Aprenda a armazenar e exibir imagens do MySQL com PHP

Veja como armazenar imagens no MySQL e recuperá-las para exibição em uma página PHP de forma eficiente.

Como armazenar imagens no banco de dados MySQL e exibi-las com PHP?

Armazenar imagens no banco de dados pode ser feito de duas formas: salvando a imagem como um BLOB (Binary Large Object) ou armazenando apenas o caminho do arquivo no sistema. A segunda opção é a mais eficiente e recomendada.

Criando a Tabela para Armazenar Imagens

Criamos uma tabela que pode armazenar o caminho do arquivo ou a imagem como BLOB:

CREATE TABLE imagens (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nome VARCHAR(100) NOT NULL,
    caminho VARCHAR(255) NOT NULL
);

Criando o Formulário para Upload da Imagem

<form action="upload.php" method="post" enctype="multipart/form-data">
    <label>Escolha uma imagem:</label>
    <input type="file" name="imagem" required>
    <button type="submit">Enviar</button>
</form>

Criando o Script de Upload (upload.php)

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $caminhoDestino = "uploads/" . basename($_FILES['imagem']['name']);
    if (move_uploaded_file($_FILES['imagem']['tmp_name'], $caminhoDestino)) {
        $conexao = new PDO("mysql:host=localhost;dbname=meu_banco", "usuario", "senha");
        $sql = "INSERT INTO imagens (nome, caminho) VALUES (:nome, :caminho)";
        $stmt = $conexao->prepare($sql);
        $stmt->bindParam(':nome', $_FILES['imagem']['name']);
        $stmt->bindParam(':caminho', $caminhoDestino);
        $stmt->execute();
        echo "Imagem salva com sucesso!";
    } else {
        echo "Erro ao salvar a imagem.";
    }
}
?>

Aqui:

  • O arquivo é salvo na pasta uploads/ e seu caminho é armazenado no MySQL.
  • move_uploaded_file() protege contra ataques de upload malicioso.

Exibindo as Imagens Salvas no Banco

<?php
$conexao = new PDO("mysql:host=localhost;dbname=meu_banco", "usuario", "senha");
$sql = "SELECT * FROM imagens";
$stmt = $conexao->prepare($sql);
$stmt->execute();

while ($linha = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo "<img src='" . $linha['caminho'] . "' alt='" . $linha['nome'] . "' width='200'>";
}
?>

Neste código, recuperamos os caminhos das imagens e os exibimos em uma página HTML.

A melhor prática ao armazenar imagens no MySQL é salvar apenas o caminho do arquivo no banco de dados. Isso reduz o tamanho do banco, melhora o desempenho das consultas e facilita o gerenciamento dos arquivos. Sistemas que lidam com grandes volumes de imagens, como e-commerces e redes sociais, utilizam essa abordagem para otimização.

Algumas aplicações:

  • Criação de galerias de imagens em sites
  • Armazenamento de avatares de usuários
  • Gestão de produtos em lojas virtuais
  • Exibição de banners e anúncios dinâmicos

Dicas para quem está começando

  • Prefira armazenar apenas o caminho da imagem no banco, em vez do arquivo binário.
  • Utilize move_uploaded_file() para garantir segurança no upload.
  • Crie uma pasta uploads/ com permissões adequadas para armazenar os arquivos.
  • Valide o tipo e tamanho do arquivo antes de salvá-lo.
  • Otimize imagens para a web antes de armazená-las para melhorar o desempenho.

Contribuições de Daniel Moreira

Compartilhe este tutorial: Como armazenar imagens no banco de dados MySQL e exibi-las com PHP?

Compartilhe este tutorial

Continue aprendendo:

Como usar AJAX para buscar dados do MySQL sem recarregar a página no PHP?

Veja como integrar AJAX com PHP e MySQL para buscar dados dinamicamente sem precisar atualizar a página.

Tutorial anterior

Como configurar conexões persistentes no MySQL com PHP?

Veja como configurar conexões persistentes no MySQL com PHP para otimizar o desempenho da aplicação.

Próximo tutorial