inforicky 0 Denunciar post Postado Abril 13, 2010 olá, estou precisando fazer vários updates, em média 33mil registros, mas acontece que: começa a executar a rotina.. update a update.... chega em um certo momento que dá erro: Fatal error: Maximum execution time of 30 seconds exceeded daí o mysql dica pirado... e isere valores nada a ver... <? //Arquivo DBF $dbname = "C:\wamp\www\orcamento\dbf\cadite.dbf"; //Conectando com o MySQL $con = mysql_connect("localhost","root","123456") or die("erro na conexão"); $id = mysql_select_db("orcamento",$con) or die("Erro na seleção do Database"); //Abre o banco de dados Dbase //0 - somente leitura //1 - somente escrita //2 - leitura / escrita $con = dbase_open($dbname,0) or die("Erro na Conexão com o arquivo DBF"); //Lista os dados da Tabela $rows = dbase_numrecords($con); for($i=1;$i<=$rows;$i++) { $registro = dbase_get_record($con,$i); //Pega o registro do arquivo DBF $ITE_CODITE =substr($registro[0],3); $ITE_SALDOS = $registro[1]; $ITE_PREVEN = $registro[2]; $ITE_PREPRA = $registro[3]; $ITE_PRE003 = $registro[4]; $sql = "select ITE_CODITE,ITE_SALDOS,ITE_PREVEN,ITE_PREPRA,ITE_PRE003 from cadite where ite_codite ='".$ITE_CODITE."'"; $exec = mysql_query($sql); $resposta = mysql_fetch_assoc($exec); $codigo = $resposta['ITE_CODITE']; $saldos = $resposta['ITE_SALDOS']; $preven = $resposta['ITE_PREVEN']; $prepra = $resposta['ITE_PREPRA']; $pre003 = $resposta['ITE_PRE003']; $EXEC=mysql_query("UPDATE cadite SET ITE_SALDOS=$ITE_SALDOS ,ITE_PREVEN=$ITE_PREVEN ,ITE_PREPRA=$ITE_PREPRA ,ITE_PRE003=$ITE_PRE003 WHERE ITE_CODITE=$ITE_CODITE "); echo "registro ".$i; echo " codigo: ".$ITE_CODITE; echo" saldoant ".$ITE_SALDOS; echo " sando novo ".$saldos; echo "<br>"; }//fecha for echo "Sucesso! Arquivos gravados"; ?> as vezes atualiza 10mil sem erros, se executo logo em seguida ele atualiza 500... assim vai... obrigado, Ricardo Compartilhar este post Link para o post Compartilhar em outros sites
inforicky 0 Denunciar post Postado Abril 13, 2010 resolvido com: Você pode utilizar a função set_time_limit pra alterar o tempo limite de execução. mas existe outra forma para fazer esse update sem ser registro a registro, melhor esclarecendo: $EXEC=mysql_query("UPDATE cadite SET ITE_SALDOS=$ITE_SALDOS ,ITE_PREVEN=$ITE_PREVEN ,ITE_PREPRA=$ITE_PREPRA ,ITE_PRE003=$ITE_PRE003 WHERE ITE_CODITE=$ITE_CODITE "); $EXEC=mysql_query("UPDATE cadite SET ITE_SALDOS=$ITE_SALDOS ,ITE_PREVEN=$ITE_PREVEN ,ITE_PREPRA=$ITE_PREPRA ,ITE_PRE003=$ITE_PRE003 WHERE ITE_CODITE=$ITE_CODITE "); $EXEC=mysql_query("UPDATE cadite SET ITE_SALDOS=$ITE_SALDOS ,ITE_PREVEN=$ITE_PREVEN ,ITE_PREPRA=$ITE_PREPRA ,ITE_PRE003=$ITE_PRE003 WHERE ITE_CODITE=$ITE_CODITE "); sem executar varios update... Compartilhar este post Link para o post Compartilhar em outros sites
rgto 0 Denunciar post Postado Novembro 25, 2011 Posso fazer duas perguntas aos especialistas? As seguintes situações também seriam viáveis para dar update em tantos registros ao mesmo tempo? Situação 1: usar Commit manual, executando várias vezes o comando Insert Situação 2: fazer tipo "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')" (... etc) só não sei como fazer esse tipo de insert com update (se é que existe a possibilidade) Essas situações também são válidas? Compartilhar este post Link para o post Compartilhar em outros sites
hufersil 145 Denunciar post Postado Novembro 25, 2011 Em MySQL você pode usar o Replace. @braços e fique com Deus! Compartilhar este post Link para o post Compartilhar em outros sites