Hoje vou falar sobre uma pequena mudança de código que pode significar megas e megas de dados e, conseqüentemente, de performance! ![]()
Suponhamos que você tenha um script que receba dados de sei lá onde e cadastre-os no MySQL, seria mais ou menos assim:
<?php
$usuarios = array();
$usuarios[] = array('nome' => 'Thiago', 'email' => 'contato@thiagobelem.net');
$usuarios[] = array('nome' => 'Fulano da Silva', 'email' => 'fulano@email.com');
$usuarios[] = array('nome' => 'Ciclano', 'email' => 'ciclano@uol.com.br');
// Inicia a variável
$cadastrados = 0;
// Para cada elemento de $usuários, faça:
foreach ($usuarios as $usuario) {
$nome = $usuario['nome'];
$email = $usuario['email'];
// Monta a consulta
$sql = "INSERT INTO `usuarios` (`id`, `nome`, `email`) VALUES (NULL, '{$nome}', '{$email}');";
// Executa a consulta verificando se foi inserido com sucesso
if (mysql_query($sql)) {
// Incrementa o contador
$cadastrados++;
}
}
echo 'Usuários cadastrados: ' . $cadastrados;
?>As consultas passadas para o MySQL ficariam mais ou menos assim:
INSERT INTO `usuarios` (`id`, `nome`, `email`) VALUES (NULL, 'Thiago', 'contato@thiagobelem.net'); INSERT INTO `usuarios` (`id`, `nome`, `email`) VALUES (NULL, 'Fulano da Silva', 'fulano@email.com'); INSERT INTO `usuarios` (`id`, `nome`, `email`) VALUES (NULL, 'Ciclano', 'ciclano@uol.com.br');
Não tem nada de errado com o código.. Funciona perfeitamente… Faz o contador direitinho.. Mas imagine se você tem 4000 registros pra inserir na tabela… Você vai rodar 4000 mysql_query() e vai deixar o seu MySQL maluquinho!
Não seria muito melhor fazer assim:
<?php
$usuarios = array();
$usuarios[] = array('nome' => 'Thiago', 'email' => 'contato@thiagobelem.net');
$usuarios[] = array('nome' => 'Fulano da Silva', 'email' => 'fulano@email.com');
$usuarios[] = array('nome' => 'Ciclano', 'email' => 'ciclano@uol.com.br');
// Início da consulta
$sql = "INSERT INTO `usuarios` (`id`, `nome`, `email`) VALUES";
// Para cada elemento de $usuários, faça:
foreach ($usuarios as $usuario) {
$nome = $usuario['nome'];
$email = $usuario['email'];
// Monta a parte consulta de cada usuário
$sql .= " (NULL, '{$nome}', '{$email}'),";
}
// Tira o último caractere (vírgula extra)
$sql = substr($sql, 0, -1);
// Executa a consulta
mysql_query($sql);
// Pega o número de registros inseridos
$cadastrados = mysql_affected_rows();
echo 'Usuários cadastrados: ' . $cadastrados;
?>A nossa consulta ficaria mais ou menos assim:
INSERT INTO `usuarios` (`id`, `nome`, `email`) VALUES (NULL, 'Thiago', 'contato@thiagobelem.net'), (NULL, 'Fulano da Silva', 'fulano@email.com'), (NULL, 'Ciclano', 'ciclano@uol.com.br')
Você pode fazer isso sem problema nenhum e com apenas uma “execução de consulta” você insere os três registros de uma só vez… Não é uma maravilha? ![]()
Você também vai gostar de ler:
- Relacionamento de Tabelas no MySQL
- Bloqueando visitantes pelo IP com MySQL e PHP
- Contador de visitas usando o MySQL
- Contador de visitantes online em PHP e MySQL
- Entendendo a paginação de registros no MySQL
Postado em Artigos, MySQL, PHP, Tutoriais
Com as tags Artigos, Código, Consultas, Contador, INSERT, Múltiplos, MySQL, Performance, PHP, Scripts, SQL, Tutoriais
Escrito por Thiago Belem
Gostou desse artigo?
Não se esqueça de assinar o RSS e divulgue-o para o mundo:
