Ir para conteúdo
Fórum Script Brasil
  • 0

Conflito de functions com dois usuarios.


dougdomi@gmail.com

Pergunta

Bem pessoal,

não sei nem como explicar esta duvida, mais vou tentar xD

Digamos que temos uma function que ela pega dados de um banco de dados para ser executada, e então duas pessoas vao executar ao mesmo tempo digamos o processo, e há uma alteração no banco de dados no mesmo registro por ambas as pessoas...como vai funcionar o processo? Antes de executar o processo é feito acesso ao banco para fazer a alteração. Vejam o exemplo abaixo:

$var1 = PEGA O VALOR X DO BANCO

$var2 = UM VALOR X QUE VAI SER ADICIONADO

function soma($var1,$var2)

{

$soma = $var1 + $var2;

$sql = mysql_query("Update valor=".$soma." where id=X");

}

Então digamos que varios usuarios podem incrementar valores ai dentro...ou fazer varios tempos de calculos mais complexos mais sempre utilizando também o valor atual que consta no banco, agora vamos lá, se dois usuarios executarem a tarefas ao mesmo temo e pegarem o mesmo valor no banco na hora da consulta (e não na hora da inserção), na hora que for inserir não vai aver o incremento e sim vai sobrepor um valor encima do outro...entenderam..neste caso ali apenas dei um exemplo.

Aguardo respostas..espero que eu tenha explicado bem...ou que pelo menos alguém tenha entendido :D

Editado por Denis Courcy
Mudança no título. Ver regra 3.6
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

O que sei é que o banco de dados vai colocar em fila todas as requisições e executar uma de cada vez...minha duvida é como vai funcionar com o PHP, já o pode ser puchadas informações no banco de dados em que alguns microsegundos atras já foram alteradas e então vai ser trabalhado com um valor desatualizado..

Acho que você não intendeu o que eu quis dizer, ou eu não consegui explicar direito

Link para o comentário
Compartilhar em outros sites

  • 0

cara, essa coisa toda de concorrência de processos é meio complicada. Geralmente existem "semáforos" e regiões protegidas, para que não haja esse tipo de coisa. Mas pra você saber com certeza, só fazendo vários acessos simultâneos. Vá em dois PCs e faça o acesso a um script PHP que faça SELECTs e UPDATEs dentro de um processo de repetição (while, for, etc.)

Link para o comentário
Compartilhar em outros sites

  • 0

sim Vithor começei a aprofundar mais na programação e verificar passo a passo os procedimentos e estou otimizando meus codigos php, alguns procedimento estao sendo feitos para evitar o tipos de problemas que relatei. Entre eles estou utilizando os CASES para verificações e a entrada de dados...Sei que o servidor web trabalha com varias entradas em simultaneo (threads) porem quando varias requisições são feitas no banco elas são enfileiradas pois mysql trabalha em single (isso impede conflitos no banco), então estou revendo as formas de trabalhar no PHP evitando em trabalhar com muitas queries em sequencia sendo obviamente que queires apenas de consultas não haveriam problemas...

Um exemplo das mudanças que fiz

//Exemplo de como eu fazia:

function set_valor($valor_atual,$valor_diminuir)

{

mysql_query("Update tabela set valor = ".$valor_atual." - ".$valor_diminuir." where id=X");

}

//Exemplo de como eu faço agora:

function set_valor($valor_diminuir)

{

mysql_query("Update tabela set valor = valor - ".$valor_diminuir." where id=X");

}

Então eu apenas faço o campo no banco recebe o valor dele menos o valor que esta sendo requisitado, pois vai que seguidamente existam duas pessoas na mesma requisição e o valor atual estejam diferentes...eu sei que a probabilidade disto acontecer é pouca porem ela existe...

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...