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

Sincronismo em PHP


moiado.anderson

Pergunta

Tenho um sistema de newsletter e uso o framework codeigniter, tenho uma base com 22 mil emails cadastrados e uso o cron do linux para rodar o script todo dia as 19h.

No meu script de envio uso a biblioteca Swift Mailer para enviar as mensagens, tive alguns problemas com envios duplicados(triplicados, etc) para o mesmo assinante, então implementei uma tabela 'envio' e a cada envio grava o id do assinante e da newsletter que ele recebeu, o problema é que ainda ocorrem duplicações.

Segue parte do script do controller de envio onde verifico se já foi enviada a mensagem:

for ($i = 1; $i <= $totalAssinantes; $i++){
  ...
  // se não foi enviado então envia
  if(!$this->envio_model->foiEnviado($subscribers[&i]['id'], $idNewsletter)){
    $message->setTo($subscribers[&i]['email']);	
    $mailer->send($message);
  
    $this->envio_model->adicionaEnvio($subscribers[$i]['id'], $idNewsletter); 
  }
  ...	
}		

E os dois métodos do meu model que adiciona o envio e verifica se já foi enviado:

public function adicionaEnvio($idAssinante, $idNewsletter){
    	$data = array(
            'id' => null,
            'idNewsletter' => $idNewsletter,
            'idAssinante' => $idAssinante
	        );
	        $str_insert = $this->db->insert_string('envio', $data);
	        $this->db->query($str_insert);
	        return $this->db->affected_rows();
    }
    public function foiEnviado($idAssinante, $idNewsletter){
    	$query = $this->db->query('
            SELECT 
                *
            FROM
                envio
            WHERE
            	idNewsletter = ? and idAssinante = ?
        ',array($idNewsletter,$idAssinante));        
      
        if ($query->num_rows() > 0) {
            return TRUE;
        } else {
            return FALSE;
        }
    }

Na tabela 'envio' alguns assinantes aparecem 20 vezes. O php aguarda a consulta de banco de dados retornar ou ele pode executar novas consultas antes da primeira terminar? existe forma de sincronizar isso?

Obs: com uma base menor de emails, ~1,5 mil emails não ocorreu duplicação.

Editado por moiado.anderson
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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,3k
    • Posts
      652,5k
×
×
  • Criar Novo...