Ir para conteúdo

POWERED BY:

Arquivado

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

pabloleary

como garantir que os dados foram todos inseridos

Recommended Posts

oi , tenho um formulario grande , e resolvi dividir o conteudo em 5 tabelas no mysql , to com medo que , por algum acaso ocorra um erro e todas as tabelas não sejam preenchidas. exemplo que como script esta :$bloco_3 = "insert into mba_3 values ('',..........mysql_query($bloco_1);mysql_query($bloco_2a);mysql_query($bloco_2b);mysql_query($bloco_2c);mysql_query($bloco_3);ele esta num modo estruturado , chegam os posts , e é inserido no banco . se por algum acaso uma tabela nao for preenchida desanda todo o bd , por elas seguem o id no inner join

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom você pode usar um java para validar os campos tipo if (compo == "")return false!! tendeu?ou no seu mysql colocar como "NULL" para que o possa ser enviado campos sem preenchimentos...belezat+B)

Compartilhar este post


Link para o post
Compartilhar em outros sites

entao , o bd pode ter valores nullos , meu medo e q na hora de inserir por algum erro alguma tabela nem seja afetada por inserção . ai todos os id que foram inseridos terao um numero superior , e na tabela que nao conseguiu ser afetada tera um numero de id inferior

Compartilhar este post


Link para o post
Compartilhar em outros sites

pablo quer uma dica coloca td numa tabela só! isso vai ajudar a evitar algum erros no futuro! beleza! Quantos campos sao? no formulario

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha ontem eu fiz e vendi um com 46 campos(alterar / excluir / busca e inserir )! fiz tudo em uma so tabela! olha a orientação vai ficar mais complicada com 5 tabelas! me diga como va vai recuperar esses dados??? cada tabela vai gravar um ID?

Compartilhar este post


Link para o post
Compartilhar em outros sites

entao eu ja fiz , esta funcionando , so to com medo de dar algum bug na hora do php inserir nas 5 tabelas eu recupero os dados pelo id , atraves de innerjoin from mba_1 inner join mba_2a on mba_1.id = mba_2a.id inner join mba_2b on mba_1.id = mba_2b.id inner join mba_2c on mba_1.id = mba_2c.id inner join mba_3 on mba_1.id = mba_3.id

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha eu nao conheço esse script nao! entao nao posso dizer se poderar haver erros! bom eu aconselhor a usuar somente 1 tabela! belezaB)

Compartilhar este post


Link para o post
Compartilhar em outros sites

vou fazer o teste com 1 tabela , mais queria normalizar esse banco e nao fazer retrabalho , e no futuro se precisar utilizar varias tabelas , preciso ter uma certeza de como fazer essa transação sem perdas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera fiz o cambalacho , meu medo era o seguinte , de na hora de inserir , uma tabela insere e as outras nao , eu preciso de todas inserções ou nenhuma , entao primeiro eu vejo se as tabelas no banco estao com as mesmas linhas se tiver eu insiro se nao ele envia um email pra mim dizendo que houve problema$a = mysql_query($sql_1);$b = mysql_query($sql_2);$c = mysql_query($sql_3);$d = mysql_query($sql_4);$e = mysql_query($sql_5);$res1 = mysql_num_rows($a); $res2 = mysql_num_rows($B);$res3 = mysql_num_rows($c);$res4 = mysql_num_rows($d);$res5 = mysql_num_rows($e);if($res1 == $res2 && $res2 == $res3 && $res3 == $res4 && $res4 == $res5){ mysql_query($bloco_1);mysql_query($bloco_2a);mysql_query($bloco_2b);mysql_query($bloco_2c);mysql_query($bloco_3);header("Location: resposta.htm");}else{mail($destinatario, $assunto, $texto, $cabecalho);print "bug";}

Compartilhar este post


Link para o post
Compartilhar em outros sites

continuando o nosso padrão POG (programação orientada a gambiarras)

 

 

eu acordei pensando o seguinte poderia ainda que houvesse um erro nao perder meus dados e fiz o seguinte

 

$a = mysql_query($sql_1);$b = mysql_query($sql_2);$c = mysql_query($sql_3);$d = mysql_query($sql_4);$e = mysql_query($sql_5);$res1 = mysql_num_rows($a); $res2 = mysql_num_rows($b);$res3 = mysql_num_rows($c);$res4 = mysql_num_rows($d);$res5 = mysql_num_rows($e);if($res1 == $res2 && $res2 == $res3 && $res3 == $res4 && $res4 == $res5){ mysql_query($bloco_1);mysql_query($bloco_2a);mysql_query($bloco_2b);mysql_query($bloco_2c);mysql_query($bloco_3);header("Location: resposta.htm");}else{mysql_query($bloco_1b);mysql_query($bloco_2ab);mysql_query($bloco_2bb);mysql_query($bloco_2cb);mysql_query($bloco_3b);mail($destinatario, $assunto, $texto, $cabecalho);header("Location: resposta.htm");}

 

 

se ele der problema na primeira vez ele tenta inserir numa tabela de backup na segunda vez e manda um email pra mim dizendo que ocorreu erro

 

 

 

sei que essa nao é a forma correta , seria possível usar COMMIT OU ROLLBACK , mais eu não manjo .

 

 

como que faz esse esquema do COMMIT OU ROLLBACK ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

e ai cara tudo joia, nao precisa de ganbiarra nao, to enviando um exemplo bem tosco para você entender como funciona transações no PHP+Mysqli. ok!

<html><head><title>Documento sem título</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head><body><?php	$mysqli = new mysqli("ip", "usuario", "senha", "banco");	echo '<br>conectou no banco';		//testa conexao	if (mysqli_connect_errno()) {		echo "<br>Conexao falhou:";		exit();	}			// desabilita o auto commit	$mysqli->autocommit(FALSE);	echo '<br>Desabilitou o auto commit';	echo '<br>Primeira etapa vai inserir 2 valores e realizar o commit';		$mysqli->query("insert into familia(descricao) values ('ola1');");	$mysqli->query("insert into familia(descricao) values ('ola2');");	$mysqli->commit();		echo '<br>segunta etapa vai tentar inserir 2 valores, porem o campo e chave primaria e nao permite valoes iguais';	$res1 = $mysqli->query("insert into familia(descricao) values ('ola3');");	$res2 = $mysqli->query("insert into familia(descricao) values ('ola2');");			if(!$res2){		$mysqli->rollback();		echo '<br> realizou rollback, pois o campo ola2 ja esta cadastrado no';	}else{		$mysqli->commit();		echo '<br>realizou commit';	}	echo '<br> fin da execucao';	$mysqli->close();/*CREATE TABLE FAMILIA (  DESCRICAO VARCHAR(45) NOT NULL,  PRIMARY KEY(DESCRICAO))*/TYPE=InnoDB;?></body></html>

observe que o campo descricao da tabela familia e chave primaria por isso nao pode inserir valores iguais, ok!isso vale para transacoes entre tabelas tambem, no seu caso basta testar se todos os insert funcionaram, caso nao basta realizar um rollback no final que todas as ultimas operaçoes do banco sao canceladas.espero ter ajudado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

vou aproveitar o gancho desse tópico, hehehe.

 

"$mysqli = new mysqli("ip", "usuario", "senha", "banco");"

 

O "mysqli" é uma biblioteca do mysql? Não entendi muito bem porque não vi nenhuma classe pra ser iniciada no código que o Oliveira J. mostrou. Isso funciona do mysql 4 pra cima né?

 

Valeu.

 

Editado:

 

Opa, http://www.master.iag.usp.br/manuais/php/br/ref.mysqli.html , acho que esse link responde.

Compartilhar este post


Link para o post
Compartilhar em outros sites

só completando a classe mysqli do PHP5 serve para o php usar todas as funcionalidades do banco mysql acima da versao 4.0, por exemplo se quiser usar todos os recursos do mysql com php4 nao daria tem que usar mysqli do php5

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um exemplo de transação:

 

START TRANSACTION;INSERT INTO cur_eventos_particip(							cod_estabel						   ,cod_evento						   ,ano						   ,cpf_participante						   ,cargo						   ,cod_instit_vinculado						   ,data_inscricao						   ,cod_pgto						   ,conf_inscricao						   ,origem_inscricao						   ,num_inscricao)					 VALUES (							 1						   ,'5'						   , 2007						   ,'77777777777'						   ,'sdfasdfa'						   ,'0'						   ,'2007-03-14'						   ,'3'						   ,'N'						   ,'WEB'						   ,'330');INSERT INTO cur_eventos_part_cobr(							cod_estabel						   ,num_inscricao						   ,numero_titulo						   ,ordem_titulo						   ,dt_vencimento						   ,valor						   ,cgc_cpf)					 VALUES (							 1						   ,'330'						   ,'106412'						   ,'A'						   ,'2007-03-21'						   ,'300.00'						   ,'77777777777');INSERT INTO cur_eventos_particip(							cod_estabel						   ,cod_evento						   ,ano						   ,cpf_participante						   ,cargo						   ,cod_instit_vinculado						   ,data_inscricao						   ,cod_pgto						   ,conf_inscricao						   ,origem_inscricao						   ,num_inscricao)					 VALUES (							 1						   ,'5'						   , 2007						   ,'66666666666'						   ,'sdfasdfasd'						   ,'0'						   ,'2007-03-14'						   ,'3'						   ,'N'						   ,'WEB'						   ,'332');INSERT INTO cur_eventos_part_cobr(							cod_estabel						   ,num_inscricao						   ,numero_titulo						   ,ordem_titulo						   ,dt_vencimento						   ,valor						   ,cgc_cpf)					 VALUES (							 1						   ,'332'						   ,'106413'						   ,'A'						   ,'2007-03-21'						   ,'300.00'						   ,'66666666666');COMMIT WORK;

Se houver algum erro o ROLLBACK é executado automaticamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Humm, beleza Fabyo, só apartir do PHP 5 então pra usar o mysqli... poderia me mostrar como fica essa linha, por exemplo, no PHP 4?"$mysqli->autocommit(FALSE);"ela tem que ser colocada dentro do comando mysql_query()? tipo mysql_query("autocommit=0; INSERT INTO...")Valeu!

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.