Marco Antonio Firmino Postado Dezembro 22, 2021 Denunciar Share Postado Dezembro 22, 2021 Meu arquivo CSV contem 26000 linhas e ao importar o arquivo para o banco, ele grava apenas 326 linhas e não retorna erro. <?php ini_set('max_execution_time', 0); include("conn.php"); $arquivo = $_FILES["file"]["tmp_name"]; $nome = $_FILES["file"]["name"]; $ext = explode(".", $nome); $extensao = end($ext); if($extensao != "csv"){ echo "Extensão inválida"; }else{ $objeto = fopen($arquivo, 'r'); while(($dados = fgetcsv($objeto, 1000, ";")) !== FALSE){ $competencia = utf8_encode($dados[0]); $regional = utf8_encode($dados[1]); $base_operacional = utf8_encode($dados[2]); $unidade_negocios = utf8_encode($dados[3]); $negocio = utf8_encode($dados[4]); $titulo = utf8_encode($dados[5]); $empresa = utf8_encode($dados[6]); $nome_abrev = utf8_encode($dados[7]); $vl_contabiliza = utf8_encode($dados[8]); $resultado = utf8_encode($dados[9]); $obs = utf8_encode($dados[10]); $result = $conn->query("INSERT INTO pcld_acum (competencia,regional,base_operacional,unidade_negocios,negocio,titulo,empresa,nome_abrev,vl_contabiliza,resultado,obs) VALUES ('$competencia','$regional','$base_operacional','$unidade_negocios','$negocio','$titulo','$empresa','$nome_abrev',$vl_contabiliza,'$resultado','$obs')"); } if($result){ echo "Dados inseridos com sucesso!"; }else{ echo "Erro ao inserir os dados!"; } } ?> Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 wash Postado Dezembro 23, 2021 Denunciar Share Postado Dezembro 23, 2021 Olá! É bem difícil adivinhar o que aconteceu sem poder reproduzir o script. Certa vez escrevi um que funcionou muito bem. Tente adaptá-lo e veja se funciona pra você tb: <?php // carrega o arquivo.csv ignorando quebras de linha no final da linha e linhas vazias $file = file('seu-arquivo.csv', FILE_TEXT | FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); // o caracter delimitador $delimitier = ';'; // caso a primeira linha seja o cabeçalho (essa linha será removida da variável $file) $header = array_shift($file); // verifica se o delimitador existe if (!strpos($header, $delimitier)) { die('O delimitador: ( <b>' . $delimitier . '</b> ), não foi encontrado!'); } // separa cada elemento do cabeçalho $header = explode($delimitier, $header); // inicia a variável para guardar os erros(se houver algum) $errors = []; // para cada linha em $file foreach ($file as $i => $line) { $arrayLine = explode($delimitier, $line); // verifica se a quantidade de colunas é igual às do header if (sizeof($arrayLine) != sizeof($header)) { $errors[] = 'A linha: <b>' . ($i + 2) . 'não tem o mesmo número de colunas!'; continue; } // tratar os dados foreach ($arrayLine as $index => $value) { // se o valor estiver entre aspas simples, serão removidas $value = trim($value, "'"); // se for numérico if (preg_match('/^[0-9.,]+$/', $value)) { // não precisa tratar o valor $arrayLine[$index] = $value; } else { // se não for numérico, o valor será tratato com utf-8, terá caracteres escapados e será colocado entre aspas simples $arrayLine[$index] = "'" . addslashes(utf8_encode($value)) . "'"; } } // coloca cada linha entre parenthesis $file[$i] = '(' . implode(', ', $arrayLine) . ')'; } // se houver erros if (sizeof($errors)) { foreach ($errors as $error) { // mostra cada erro encontrado na tela echo '<p>' . $error . '</p>'; } } // considera o cabeçalho como sendo iguais aos nomes das colunas do database $keys = $header; // quebra as linhas em grupos de 100 linhas $inserts = array_chunk($file, 100, true); // para cada grupo de 100 linhas foreach ($inserts as $v) { // adiciona a query de inserção no array $dump $dump[] = "insert into $table(`" . implode('`, `', $keys) . "`) values\n " . implode(",\n ", $v) . "\n"; } // para cada grupo de 100 inserções por insert em $dump foreach ($dump as $query) { // mostra na tela como ficou cada query de 100 inserções por insert echo '<pre>$query: '; print_r($query); echo '</pre>'; // execute a sua query de inserção no banco de dados aqui } Ao invés de inserir cada linha uma a uma, inserir em grupos de 100 diminui em muito a quantidade de requisições ao database, aumentando em muito o desempenho. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Marco Antonio Firmino
Meu arquivo CSV contem 26000 linhas e ao importar o arquivo para o banco, ele grava apenas 326 linhas e não retorna erro.
<?php
ini_set('max_execution_time', 0);
include("conn.php");
$arquivo = $_FILES["file"]["tmp_name"];
$nome = $_FILES["file"]["name"];
$ext = explode(".", $nome);
$extensao = end($ext);
if($extensao != "csv"){
echo "Extensão inválida";
}else{
$objeto = fopen($arquivo, 'r');
while(($dados = fgetcsv($objeto, 1000, ";")) !== FALSE){
$competencia = utf8_encode($dados[0]);
$regional = utf8_encode($dados[1]);
$base_operacional = utf8_encode($dados[2]);
$unidade_negocios = utf8_encode($dados[3]);
$negocio = utf8_encode($dados[4]);
$titulo = utf8_encode($dados[5]);
$empresa = utf8_encode($dados[6]);
$nome_abrev = utf8_encode($dados[7]);
$vl_contabiliza = utf8_encode($dados[8]);
$resultado = utf8_encode($dados[9]);
$obs = utf8_encode($dados[10]);
$result = $conn->query("INSERT INTO pcld_acum
(competencia,regional,base_operacional,unidade_negocios,negocio,titulo,empresa,nome_abrev,vl_contabiliza,resultado,obs)
VALUES
('$competencia','$regional','$base_operacional','$unidade_negocios','$negocio','$titulo','$empresa','$nome_abrev',$vl_contabiliza,'$resultado','$obs')");
}
if($result){
echo "Dados inseridos com sucesso!";
}else{
echo "Erro ao inserir os dados!";
}
}
?>
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.