[Introdução ao PHP] O Básico de Conectar PHP e Bancos de Dados (SQL) para Exibir uma Lista
Em artigos anteriores, aprendemos a sintaxe básica do PHP, como arrays, loops e funções. No entanto, em sites reais, dados como avisos e listas de produtos geralmente não são escritos diretamente nos arquivos PHP, mas sim gerenciados em um cofre especial chamado banco de dados.
"Como eu conecto o PHP a um banco de dados?", "Como eu exibo os dados recuperados com SQL em uma página da web?" Estas são grandes barreiras que muitos criadores de web enfrentam. Este artigo irá esclarecer essas dúvidas. Vamos experimentar todo o processo de conexão a um banco de dados a partir do PHP e exibir os dados recuperados com SQL como uma tabela usando um loop `foreach`, com um código completo que funciona ao copiar e colar. Uma vez que você sinta a emoção do momento em que o PHP e o SQL se conectam, com certeza vai querer experimentar com seus próprios dados!
Para preparar seu ambiente para rodar o PHP (ambiente de desenvolvimento), se você ainda não configurou o XAMPP, por favor, consulte [Introdução ao PHP] Um Guia Completo para Baixar e Instalar o XAMPP!. Após a instalação, basta colocar seu arquivo PHP na pasta especificada (como `htdocs`), e você estará pronto!
1. Os 3 Passos da Colaboração entre PHP e Banco de Dados
O fluxo de como o PHP interage com um banco de dados é amplamente composto pelos seguintes três passos.
- Conectar (Connect): O PHP diz "Olá, posso falar com você?" para o banco de dados e estabelece uma conexão.
- Comando (Execute Query): O PHP dá um comando ao banco de dados em uma linguagem chamada SQL, dizendo "Por favor, me dê estes dados desta tabela".
- Exibir (Display Results): O PHP converte os dados recebidos do banco de dados em HTML e os exibe na página da web.
Desta vez, usaremos um mecanismo chamado PDO (PHP Data Objects) para realizar estes três passos de uma maneira segura e moderna. O PDO é um recurso padrão do PHP que pode lidar com vários tipos de bancos de dados e também é excelente em termos de segurança, tornando-o conhecimento essencial no desenvolvimento atual de PHP.
2. Na Prática! Exibindo uma Lista de Produtos de um Banco de Dados
Agora, vamos realmente escrever o código para recuperar e exibir uma lista de produtos de um banco de dados.
Passo A: Preparando o Banco de Dados e a Tabela
Primeiro, você precisa preparar uma tabela para armazenar os dados. Em uma ferramenta de gerenciamento de banco de dados como o phpMyAdmin, execute a seguinte instrução SQL para criar uma tabela `products` e registrar três itens de dados de amostra.
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
price INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO products (name, price) VALUES
('Laptop de alto desempenho', 120000),
('Fones de ouvido sem fio', 15000),
('Monitor 4K', 45000);
Passo B: Recuperando e Exibindo Dados com PHP
Quando a tabela estiver pronta, é a vez do PHP. O código a seguir é uma amostra completa que inclui tudo, desde a conexão com o banco de dados, a recuperação de dados, até a exibição em HTML. Se você carregar este arquivo para o seu servidor, poderá verificar o resultado no seu navegador.
<!DOCTYPE html>
<html lang="pt">
<head>
<meta charset="UTF-8">
<title>Lista de Produtos</title>
<style>
body { font-family: sans-serif; padding: 20px; }
h1 { border-bottom: 2px solid #0056b3; }
.product-table { width: 100%; border-collapse: collapse; margin-top: 20px; }
.product-table th, .product-table td { border: 1px solid #ddd; padding: 12px; text-align: left; }
.product-table th { background-color: #f2f2f2; }
.product-table tr:nth-child(even) { background-color: #f9f9f9; }
.error-message { color: red; font-weight: bold; border: 1px solid red; padding: 10px; }
</style>
</head>
<body>
<h1>Lista de Produtos</h1>
<?php
// --- 1. Conexão com o banco de dados ---
$db_host = 'localhost'; // Nome do host do servidor de banco de dados
$db_name = 'your_database_name'; // Nome do banco de dados
$db_user = 'your_username'; // Nome de usuário do banco de dados
$db_pass = 'your_password'; // Senha do banco de dados
try {
// Criar um objeto PDO para se conectar ao banco de dados
$pdo = new PDO("mysql:host={$db_host};dbname={$db_name};charset=utf8", $db_user, $db_pass);
// Definir o modo de erro para lançar exceções
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// --- 2. Execução de SQL ---
// Consulta para obter todos os dados da tabela products
$stmt = $pdo->prepare("SELECT id, name, price FROM products ORDER BY id");
$stmt->execute();
// --- 3. Recuperação e Exibição de Resultados ---
// Buscar todos os dados como um array associativo
$products = $stmt->fetchAll(PDO::FETCH_ASSOC);
if ($products) {
echo '<table class="product-table">';
echo '<tr><th>ID do Produto</th><th>Nome do Produto</th><th>Preço</th></tr>';
// Loop com foreach
foreach ($products as $product) {
echo '<tr>';
echo '<td>' . htmlspecialchars($product['id']) . '</td>';
echo '<td>' . htmlspecialchars($product['name']) . '</td>';
echo '<td>R$ ' . number_format($product['price'], 2, ',', '.') . '</td>';
echo '</tr>';
}
echo '</table>';
} else {
echo '<p>Nenhum dado de produto encontrado.</p>';
}
} catch (PDOException $e) {
// Manipulação de erros de conexão ou consulta
echo '<div class="error-message">Erro de banco de dados: ' . htmlspecialchars($e->getMessage()) . '</div>';
}
?>
</body>
</html>
Importante: Antes de executar o código acima, certifique-se de substituir `your_database_name`, `your_username` e `your_password` pelas configurações do seu próprio ambiente.
Se você acessar este arquivo em seu navegador e a lista de produtos for exibida na tabela, você conseguiu! Este é o momento em que o PHP interage com o banco de dados e gera dinamicamente o resultado como HTML.
3. Pontos a Serem Observados
A integração com o banco de dados é muito poderosa, mas há alguns pontos a serem observados. A segurança e o tratamento de erros são particularmente importantes.
Tratamento de Erros (sintaxe try...catch)
Se a senha do banco de dados estiver errada ou houver um erro na sintaxe SQL, o programa irá parar com um erro. Ao envolver todo o processo em um bloco `try...catch`, mesmo que ocorra um erro, você pode capturá-lo e exibir uma mensagem de erro personalizada em vez de o site ficar em branco.
<?php
try {
// Processo para conectar ao banco de dados e recuperar dados
// Se ocorrer um erro dentro deste bloco...
$pdo = new PDO("mysql:host=localhost;dbname=wrong_db;charset=utf8", "user", "pass");
} catch (PDOException $e) {
// ...o processamento aqui será executado
echo "Ocorreu um erro: " . $e->getMessage();
// Em um site real, você mostraria uma mensagem simples ao usuário,
// e registraria os detalhes do erro em um arquivo de log.
// exit(); // Para o processo
}
?>
Este mecanismo evita confundir os usuários quando ocorre um erro inesperado e facilita para os desenvolvedores identificarem a causa do erro.
Contramedidas contra Injeção de SQL
Ao construir uma instrução SQL com base na entrada do usuário (como palavras-chave de busca), você corre o risco de um ataque muito perigoso chamado **injeção de SQL**. Este é um ataque onde instruções SQL maliciosas são injetadas para manipular o banco de dados indevidamente.
As **declarações preparadas** do PDO (o método usando `prepare()` e `execute()`) são a contramedida mais eficaz contra a injeção de SQL. Mesmo que não haja entrada do usuário desta vez, você deve criar o hábito de sempre usar este método.
4. Resumo
Neste artigo, aprendemos os três passos básicos para integrar PHP e bancos de dados (Conectar, Comandar, Exibir) do início ao fim usando o PDO. Ser capaz de recuperar e exibir dinamicamente dados de um armazenamento externo como um banco de dados, em vez de escrevê-los diretamente em um arquivo PHP, é um grande passo no desenvolvimento de aplicações web.
Uma vez que você domine esta forma básica, poderá aplicá-la de várias maneiras, como adicionar uma cláusula `WHERE` para filtrar dados por uma condição específica, ou integrá-la a um formulário para registrar dados com uma instrução `INSERT`. Encorajamos você a experimentar várias coisas com suas próprias tabelas и dados!