No desenvolvimento de sistemas web, é comum precisar importar dados de arquivos CSV para um banco de dados. Usando PHP e a extensão mysqli
, você pode realizar essa tarefa de forma direta e eficiente. Neste post, vamos mostrar como fazer isso sem encapsular a lógica em funções ou classes adicionais, com um código simples e direto.
O Que Vamos Fazer?
Neste exemplo, vamos importar dados de um arquivo CSV para uma tabela chamada usuarios
no banco de dados MySQL. A tabela contém os campos nome
e email
, e o CSV deve ter esses dados organizados de acordo.
Estrutura da Tabela no Banco de Dados
Primeiro, vamos criar a tabela usuarios
no banco de dados MySQL com a seguinte estrutura:
CREATE TABLE usuarios (
id INT AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(100),
email VARCHAR(100)
);
Passo a Passo para Importar o CSV
Aqui está a parte solicitada formatada em Markdown:
### Conexão com o Banco de Dados
Começamos criando a conexão com o banco de dados usando `mysqli` e verificando se a conexão foi bem-sucedida.
```php
$host = 'localhost';
$user = 'root';
$pass = 'senha';
$db = 'meu_banco';
// Criar a conexão
$conn = new mysqli($host, $user, $pass, $db);
if ($conn->connect_error) {
die("Falha na conexão: " . $conn->connect_error);
}
Abrindo o Arquivo CSV
Usamos a função fopen()
para abrir o arquivo CSV. O código a seguir remove a linha que ignora a primeira linha (cabeçalho), permitindo importar todas as linhas do CSV, incluindo o cabeçalho, se necessário.
$caminhoCSV = 'caminho/para/seu/arquivo.csv';
// Abrir o arquivo CSV
if (($handle = fopen($caminhoCSV, 'r')) !== FALSE) {
// Não ignoramos a primeira linha (cabeçalho) neste exemplo
// fgetcsv($handle, 1000, ','); // Essa linha foi removida
} else {
echo "Não foi possível abrir o arquivo CSV.";
}
Preparando a Inserção no Banco de Dados
Agora, preparamos a consulta SQL para inserir os dados na tabela usuarios
. Usamos prepare()
para garantir que os dados sejam inseridos de forma segura, evitando SQL Injection.
// Preparar a consulta de inserção
$sql = "INSERT INTO usuarios (nome, email) VALUES (?, ?)";
$stmt = $conn->prepare($sql);
if ($stmt === false) {
die('Erro na preparação da consulta: ' . $conn->error);
}
Lendo os Dados do CSV e Inserindo no Banco
Com o arquivo CSV aberto, vamos ler linha por linha e inserir os dados na tabela. Para cada linha, vinculamos os valores de nome
e email
aos parâmetros da consulta e executamos a inserção.
// Ler o conteúdo do CSV e inserir no banco de dados
while (($linha = fgetcsv($handle, 1000, ',')) !== FALSE) {
$nome = $linha[0];
$email = $linha[1];
// Vincular parâmetros e executar a consulta
$stmt->bind_param('ss', $nome, $email);
$stmt->execute();
}
// Fechar o arquivo CSV
fclose($handle);
echo "Importação concluída!";
Fechando a Conexão com o Banco de Dados
Após a importação ser concluída, fechamos a conexão com o banco de dados para liberar os recursos.
// Fechar a conexão com o banco de dados
$conn->close();
Agora, o conteúdo está formatado corretamente para ser usado no seu post em Markdown!
Considerações Finais
- Segurança: A utilização de
bind_param()
garante que os dados sejam tratados de maneira segura, evitando o risco de SQL Injection. - Desempenho: Este método é simples e eficiente para arquivos CSV de tamanho moderado. Para arquivos muito grandes, pode ser necessário otimizar a leitura e inserção para evitar problemas de desempenho.
- Flexibilidade: Caso seu CSV use um delimitador diferente, como ponto e vírgula, basta ajustar o delimitador na função
fgetcsv()
.
Conclusão
Com o código apresentado, você pode importar dados de arquivos CSV diretamente para o seu banco de dados MySQL de forma simples e eficiente, utilizando apenas o mysqli
e sem a necessidade de funções ou classes adicionais. Esse processo é útil quando você precisa migrar ou adicionar grandes volumes de dados de maneira rápida e automatizada.