Page does not load for cause and transaction

Asked

Viewed 61 times

0

I am trying to implement a transaction on my Sqls, but because of them, my page does not load. Follow the code:

<?php
//CONEXÃO COM O BANCO DE DADOS
include_once("conexao.php");

//VARIÁVEIS COM DADOS DO FORMULÁRIO
$nome = $_POST["nome"];
$email = $_POST["email"];
$senha = $_POST["senha"];
$senhaConfirm = $_POST["senhaConfirm"];
$telefone = $_POST["telefone"];
$celular = $_POST["celular"];
$rua = $_POST["rua"];
$bairro = $_POST["bairro"];
$numero = $_POST["numero"];
$cidade = $_POST["cidade"];
$estado = $_POST["estado"];
$cep = $_POST["cep"];
$complemento = $_POST["complemento"];
$usuario = $_POST["usuario"];
$nomeMercado = $_POST["nomeMercado"];
$cnpj = $_POST["cnpj"];
$telefoneMercado = $_POST["telefoneMercado"];
$celularMercado = $_POST["celularMercado"];
$expedienteInicio = $_POST["expedienteInicio"];
$expedienteFim = $_POST["expedienteFim"];
$arquivo = $_POST["arquivo"];

$cod_usuario;
$cod_endereco;


//INICIO DA TRANSAÇÃO
$pdo->beginTransaction();
//INSERÇÃO DE DADOS NA TABELA ENDEREÇO
$insertEndereco = $pdo->prepare("INSERT INTO ENDERECO(COD_ENDERECO, BAIRRO, CEP, CIDADE, COMPLEMENTO, ESTADO, NUMERO, RUA) VALUES(:bairro, :cep, :cidade, :complemento, :estado, :numero, :rua)");  
$insertEndereco->bindValue(":bairro",$bairro);
$insertEndereco->bindValue(":cep",$cep);
$insertEndereco->bindValue(":cidade",$cidade);
$insertEndereco->bindValue(":complemento",$complemento);
$insertEndereco->bindValue(":estado",$estado);
$insertEndereco->bindValue(":numero",$numero);
$insertEndereco->bindValue(":rua",$rua);
$insertEndereco->execute();
//VERIFICA SE A INSERÇÃO DE DADOS DE ENDEREÇO RETORNA TRUE(FOI REALIZADA)
if (!$insertEndereco) {
    die("Oops, houve um erro no cadastro de seu endereço, tente novamente ou contacte a adaministração.");
}
//INSERÇÃO DE DADOS NA TABELA USUARIO
$insertUsuario = $pdo->prepare("INSERT INTO USUARIOS(COD_ENDERECO, NOME_USUARIO, E-MAIL_USUARIO, SENHA_USUARIO, TELEFONE, CELULAR,  TIPO_USUARIO,) VALUES(:cod_endereco,:nome,:email, :senha, :telefone, :celular, :usuario)"); 
$insertUsuario->bindValue("cod_endereco",$cod_endereco); //LAST_INSERT_ID()
$insertUsuario->bindValue(":nome",$nome);
$insertUsuario->bindValue(":email",$email);
$insertUsuario->bindValue(":senha",$senha);
$insertUsuario->bindValue(":telefone",$telefone);
$insertEndereco->bindValue(":celular",$celular);
$insertEndereco->bindValue(":usuario",$usuario);
$insertEndereco->execute();
if (!$insertUsuario) {
    die("Oops, houve um erro no cadastro de seus dados pessoais, tente novamente ou contacte a adaministração.");
}

//INSERÇÃO DE DADOS NA TABELA SUPERMERCADO
$insertMercado = $pdo->prepare("INSERT INTO SUPERMERCADO (CNPJ, NOME, FOTO_SUPERMERCADO, INICIO_EXPEDIENTE,                 
    FIM_EXPEDIENTE, TELEFONE) VALUES (:cod_endereco_mercado, :cod_usuario, :cnpj, :nomeMercado, :arquivo, :expedienteInicio, :expedienteFim, :$telefoneMercado)");
    $insertMercado->bindValue(":cod_endereco_mercado",$cod_endereco);
    $insertMercado->bindValue(":cod_usuario",$cod_usuario);  
$insertMercado->bindValue(":cnpj",$cnpj);
$insertMercado->bindValue(":nomeMercado",$nomeMercado);
$insertMercado->bindValue(":arquivo",$arquivo);
$insertMercado->bindValue(":expedienteInicio",$expedienteInicio);
$insertMercado->bindValue(":expedienteFim",$expedienteFim);
$insertMercado->bindValue(":telefoneMercado",$telefoneMercado);
$insertMercado->execute();
//CASO TENHA DADO ALGUM ERRO NA TRANSAÇÃO rollBack IRÁ CANCELAR TODAS ELAS
$pdo->rollBack();
if (!$insertMercado) {
    die("Oops, houve um erro no cadastro de seu mercado, tente novamente ou contacte a adaministração.");
}
//FINALIZANDO TRANSAÇÃO
$pdo->commite();    ?>

What might be going on?

  • What do you mean by not carry? Gives some error or exceeds the loading time limit?

  • The page does not load, says it is not working, stating error 500 http.

  • In your server log some more specific error appears?

  • No, when I take out the transaction mechanism the page normally loads.

  • Put a Try catch before prepare and print the error to see what’s happening

  • Are you running locally? Some servers prevent you from showing errors. That’s why they don’t load the page

Show 1 more comment

1 answer

0

First to run your transaction you have to instantiate a connection:

private $connection = null;

public function insert (Bairro $bairro){
         $this->connection =  null;
         $teste = false;

         $this->connection = new ConnectionFactory();
         $this->connection->beginTransaction();
         try{
             $query = "INSERT INTO bairro 
                       (CD_BAIRRO, NM_BAIRRO, CD_CIDADE) 
                       VALUES 
                       (NULL, :bairro, :cidade)";


             $stmt = $this->connection->prepare($query);
             $stmt->bindValue(":bairro", $bairro->getNmBairro(), PDO::PARAM_STR);
             $stmt->bindValue(":cidade",$bairro->getCidade()->getCdCidade(), PDO::PARAM_INT);

             $stmt->execute();
             $teste =  true;
             $this->connection->commit();


             $this->connection =  null;
         }catch(PDOException $exception){
             echo "Erro: ".$exception->getMessage();
         }
         return $teste;
     }

Then you create the Connection class so you can instantiate the connection in your method.

Connectionfactory.class.php

class ConnectionFactory extends PDO
{
    private $dsn = 'mysql:host=localhost;dbname=seubanco';

    private $user = 'usuario';
    private $password = 'senha';
    public $handle = null;

    function __construct() {
        try {
            //aqui ela retornará o PDO em si, veja que usamos parent::_construct()
            if ($this->handle == null) {
                $dbh = parent::__construct($this->dsn, $this->user, $this->password);
                $this->handle = $dbh;
                return $this->handle;
            }
        } catch (PDOException $e) {
            echo 'Conexão falhou. Erro: ' . $e->getMessage();
            return false;
        }
    }

    //aqui criamos um objeto de fechamento da conexão
    function __destruct() {
        $this->handle = NULL;
    }
}

To get a sense of what error is happening on your system, you can add the following lines of code:

ini_set('display_errors',1);
ini_set('display_startup_erros',1);
error_reporting(E_ALL);

Or create a file and call with include

I hope I’ve helped

  • It helped me yes, when I manage to implement what was past I say if it worked. Grateful.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.