Ir para conteúdo
Fórum Script Brasil

moiado.anderson

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Sobre moiado.anderson

moiado.anderson's Achievements

0

Reputação

  1. 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.
×
×
  • Criar Novo...