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.
Qual a melhor forma de armazenar imagens no MySQL com PHP?
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