Ir para conteúdo

Arquivado

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

fsf

controle de transação

Recommended Posts

Pessoal,Estou tentando usar o controle de transação no postgree mas não estou conseguindo!! $query = "roolback"; $result = pg_query($query);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Marceloy,

 

To tentando fazer o controle de transação de um carrinho

Inserindo dados em duas tabelas!

Mas, não estou conseguindo usar o rollback direito!!!

Por exemplo se acintecer algum erro na inserção de dados da segunda tabela os dados inseridos na primeira não devem existir!! Mas não estou conseguindo fazer isto!!

O codigo:

 

function insert_order($data,$unidade,$retirado,$matricula){  // extract order_details out as variables // extract($order_details);  //$date = date('Y-m-d');  $hora = date("H:i");  $date = data_mysql($data); $usuario =  $_SESSION['usuario'];	 $query = "insert into tb_saida_secretaria			 (retiradopor,matricula,			  horacadastro,datasaida			  ,codunidade,responsavelcadastro) values(			  '$retirado',			  '$matricula',			  '$hora','$date',			  '$unidade',			  '$usuario')";		///echo $query;		$result = pg_query($query);	if (!$result){	  $query = "rollback";   //echo $query;	$result = pg_query($query);	  return false;  }     $query = "select max(codsaida) as codigo from tb_saida_secretaria;";  $result = pg_query($query);	if (!$result){	 /$query = "rollback";   //echo $query;	$result = pg_query($query);	  return false;  }else{    $orderid = pg_fetch_array($result);    }      // insert each book  foreach($_SESSION['cart'] as $cod=> $quantity)  {	$detail = get_prod_details($cod);		$query = "select produto.descricao,estoque.quantidade from tb_estoque_secretaria estoque, tb_produto produto where estoque.codproduto = produto.codproduto and estoque.codproduto =".$orderid['codigo'];	$result = pg_query($query);	$quant = pg_fetch_array($result);  		if($quant['quantidade'] < $quantity){	 	  echo '<script>	  		alert("\n A quantidade do produto é insuficiente!")		  </script>';	 	  $query = "rollback";	  $result = pg_query($query);	  	  return false;		}		$query = "insert into tb_item_saida_secretaria(codsaida,codproduto,quantidade) values			  ('".$orderid['codigo']."', '$cod', $quantity)";   //echo $query;	$result = pg_query($query);	if(!$result){	$query = "rollback";   //echo $query;	$result = pg_query($query);	  return false;	  }  }    return $orderid;}?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Marceloy,

 

Tava faltando o begin mesmo!!

Agora o codigo ficou assim:

{  // extract order_details out as variables // extract($order_details);  //$date = date('Y-m-d');	$query = "BEGIN";   //echo $query;  $result = pg_query($query);  $hora = date("H:i");  $date = data_mysql($data); $usuario =  $_SESSION['usuario'];	 $query = "insert into tb_saida_secretaria			 (retiradopor,matricula,			  horacadastro,datasaida			  ,codunidade,responsavelcadastro) values(			  '$retirado',			  '$matricula',			  '$hora','$date',			  '$unidade',			  '$usuario')";		///echo $query;		$result = pg_query($query);	if (!$result){	  $query = "rollback";   //echo $query;	$result = pg_query($query);	  return false;  }     $query = "select max(codsaida) as codigo from tb_saida_secretaria;";  $result = pg_query($query);	if (!$result){	$query = "rollback";   //echo $query;	$result = pg_query($query);	  return false;  }else{    $orderid = pg_fetch_array($result);    }      // insert each book  foreach($_SESSION['cart'] as $isbn => $quantity)  {	$detail = get_book_details($isbn);		$query = "select produto.descricao,estoque.quantidade from tb_estoque_secretaria estoque, tb_produto produto where estoque.codproduto = produto.codproduto and estoque.codproduto =".$isbn;	//echo $query;	$resultado = pg_query($query);	$dados = pg_fetch_array($resultado);  	 //while ($dados=pg_fetch_array($resultado)) {	  $teste = $dados["descricao"];	// }	if($dados["quantidade"] < $quantity){		  	  // echo "<script>alert('A quantidade do produto $teste no estoque é insuficiente!');	print "<script>alert('A quantidade do produto $teste no estoque é insuficiente!');</script>";	 	  $query = "rollback";	  $result = pg_query($query);	  	  return false;		}		$query = "insert into tb_item_saida_secretaria(codsaida,codproduto,quantidade) values			  ('".$orderid['codigo']."', '$isbn', $quantity)";   //echo $query;	$result = pg_query($query);		 $query = "update tb_estoque_secretaria						set quantidade = quantidade - $quantity 						where codproduto = $isbn						";						  	$result = pg_query($query);	if(!$result){	$query = "rollback";   //echo $query;	$result = pg_query($query);	  return false;	  }  }	$query = "COMMIT ";   	$result = pg_query($query);	 pg_close($connect);    return $orderid;}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas agora deu certo ??

 

Nunca trabalhei com Postgree mas pela função que te mostrei acho que poderia fazer algo da forma:

 

// Iniciar transação.$query = "BEGIN";// Realizar normalmente as iterações com a base.......// Verificar se houve falhas e proceder por ROLLBACK ou COMMIT.if(pg_transaction_status($idConexao) == PGSQL_TRANSACTION_IDLE)	$query = "COMMIT";else   $query = "ROLLBACK";

Claro que só dei uma idéia. É mais ou menos dessa forma que faço no MySQL.

A idéia é:

 

1. Definir o inicio da transação.

2. Realizar operações.

3. Ao final, definir se as operações se concretizam ou se retrocedem.

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.