Como Importar um Arquivo CSV para o Banco de Dados MySQL Usando PHP e mysqli

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.

Rolar para cima