Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

inforicky

[Resolvido] php+mysql varios updates ao mesmo tempo

Recommended Posts

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.