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

PDO INSERT BEGINTRANSACTION - Não funciona


rafaeldorazio

Pergunta

O primeiro insert deu certo.

O segundo insert deu erro.

O rollback não foi feito, o primeiro insert foi inserido na base. Como eu faço para quando der erro em qualquer insert dar rollback em todos os inserts ?

$produto_id = split(";", $_GET["produto_id"]);
$produto_quantidade = split(";", $_GET["produto_quantidade"]);

$db = new PDO('mysql:host=localhost;port=3306;dbname=namorofalso', 'root', 'Altera1janio1');
try {
/* ------------------------------------ LISTA DADOS DOS ITENS DOS PRODUTOS COMPRADOS ------------------------------------------------------- */
    $pedido_valor = 0;
    for($index = 0; $index < count($produto_id); $index++) {
        $stmt = $db->prepare("SELECT * FROM tb_produto WHERE produto_id=:produto_id");
        $stmt->bindValue(':produto_id', $produto_id[$index], PDO::PARAM_INT);
        $stmt->execute();
        $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);


        $pedido_valor += ($rows[0]["produto_valor"] * $produto_quantidade[$index]);
        $item = array("produto_id" => $rows[0]["produto_id"], "item_nome" => $rows[0]["produto_nome"],
            "item_valor" => $rows[0]["produto_valor"]);
    }
/* -------------------------------- CADASTRA O PEDIDO E OS ITENS DOS PEDIDOS COMPRADOS ----------------------------------------------------- */
    $db->beginTransaction();


    //PEDIDO
    $db->exec('INSERT INTO tb_pedido(pedido_valor) VALUES('. $pedido_valor .')');
    $pedido_id = $db->lastInsertId();


    //ITEM DO PEDIDO
    for($index = 0; $index < count($item); $index++)
        $db->exec('INSERT INTO tb_pedido_item(pedido_id, item_valor, produto_id) VALUES("$pedido_id", "$item[$index]["item_valor"]", "$item[$index]["produto_id"]")');


    $db->commit();
}
catch (PDOException $e) {
    $db->rollBack();
    echo $e->getMessage();
}
Editado por rafaeldorazio
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,3k
×
×
  • Criar Novo...