How to insert PDO records into Mysql sequentially

Asked

Viewed 179 times

3

I am sending six fields of a form to insert in my Mysql but only the first three are going correctly, I need to insert the first three and in sequence the other three, but I have this difficulty in understanding how to do.

The variables are these?

$IdCandidato = $_SESSION['IdCandidato'];
$IdArea1 = $_POST['Area1'];
$IdCargo1 = $_POST['Cargo1'];
$Experiencia1 = $_POST['Experiencia1'];

$Area2 = $_POST['Area2'];
$Cargo2 = $_POST['Cargo2'];
$Experiencia2 = $_POST['Experiencia2'];

$DataHoraAtualizacao = date('Y-m-d H:i:s');

The variables IdCandidato and DataHoraAtualizacao I’m recovering at the time of the recording attempt.

I’ll put an image to explain better, the form is this:

inserir a descrição da imagem aqui

The table structure is like this:

CREATE TABLE `crrAreaExpectativa` (
    `IdAreaExpectativa` INT(10) NOT NULL AUTO_INCREMENT COMMENT 'Código da area expectativa',
    `IdCandidato` INT(10) NOT NULL COMMENT 'Código do candidato',
    `Opcao` TINYINT(1) NOT NULL COMMENT 'Opção: 1 ou 2',
    `IdArea` INT(10) NOT NULL COMMENT 'Código da área',
    `IdCargo` INT(10) NOT NULL COMMENT 'Código do cargo',
    `DataHoraAtualizacao` DATETIME NOT NULL COMMENT 'Data/Hora da atualização',
    PRIMARY KEY (`IdAreaExpectativa`, `IdCandidato`),
    INDEX `IDXOpcao` (`Opcao`),
    INDEX `IDXIdArea` (`IdArea`),
    INDEX `IDXIdCargo` (`IdCargo`),
    INDEX `FK_AreaExpectativa_Candidato` (`IdCandidato`),
    CONSTRAINT `FK_AreaExpectativa_Candidato` FOREIGN KEY (`IdCandidato`) REFERENCES `crrCandidato` (`IdCandidato`) ON UPDATE NO ACTION ON DELETE CASCADE
)
COMMENT='Área e cargo onde o candidato deseja trabalhar'
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=14
;

What I’m trying to do is this:

try {

    // INICIALIZA A TRANSAÇÃO
    $conexao->beginTransaction();

        try {                

            // INSERT 3 PRIMEIROS CAMPOS
            $sql1 = 'INSERT INTO `crrAreaExpectativa` (`IdCandidato`, `Opcao`, `IdArea`, `IdCargo`, `DataHoraAtualizacao`) VALUES (?,?,?,?,?)';
            $stm = $conexao->prepare($sql1);
            $stm->bindValue(1, $IdCandidato, PDO::PARAM_INT);
            $stm->bindValue(2, $Experiencia1, PDO::PARAM_INT);
            $stm->bindValue(3, $IdArea1, PDO::PARAM_INT);
            $stm->bindValue(4, $IdCargo1, PDO::PARAM_INT);
            $stm->bindValue(5, $DataHoraAtualizacao, PDO::PARAM_STR);
            $retorno = $stm->execute(); 


            // INSERT 3 ÚLTIMOS CAMPOS
            $sql2 = 'INSERT INTO `crrAreaExpectativa` (`IdCandidato`, `Opcao`, `IdArea`, `IdCargo`, `DataHoraAtualizacao`) VALUES (?,?,?,?,?)';
            $stm = $conexao->prepare($sql2);
            $stm->bindValue(1, $IdCandidato, PDO::PARAM_INT);
            $stm->bindValue(2, $Experiencia2, PDO::PARAM_INT);
            $stm->bindValue(3, $IdArea2, PDO::PARAM_INT);
            $stm->bindValue(4, $IdCargo2, PDO::PARAM_INT);
            $stm->bindValue(5, $DataHoraAtualizacao, PDO::PARAM_STR);
            $retorno = $stm->execute(); 

            $conexao->commit();

        } catch (PDOException $erro) {  

                // DESFAZ TRANSAÇÃO ATUAL
                $conexao->rollBack();           
                $erro = $erro->getMessage();
                $retorno = array('codigo' => '0', 'mensagem' => ' Erro ao inserir o registro. Tente novamente [2]. ::$erro');
                $conexao = null;        

                // RETORNO DE MENSAGEM
                echo json_encode($retorno);
                exit();             

        }



} catch (Exception $e) {    

    // DESFAZ TRANSAÇÃO ATUAL
    $conexao->rollBack();   
    $retorno = array('codigo' => '0', 'mensagem' => ' Ocorreu um erro na gravação, tente novamente [5]. ::$erro');              
    $conexao = null;        

    // RETORNO DE MENSAGEM
    echo json_encode($retorno);
    exit();     
}

$retorno = array('codigo' => '1', 'mensagem' => ' Registro inserido com sucesso');  

// FECHA CONEXÃO
$conexao = null;        

// RETORNO DE MENSAGEM
echo json_encode($retorno);
exit();

1 answer

3


Variables are not equal. In the part where you receive the values of the last 3 fields per $_POST is under the wrong name in relation to your Insert in the bank.

How are you:

$Area2 = $_POST['Area2'];
$Cargo2 = $_POST['Cargo2'];

As it should be:

$IdArea2 = $_POST['Area2'];
$IdCargo2 = $_POST['Cargo2'];

Thus, the variables were equal to the variables in your Index:

$stm->bindValue(3, $IdArea2, PDO::PARAM_INT);
$stm->bindValue(4, $IdCargo2, PDO::PARAM_INT);
  • Damn the one about the drug test really got me, thanks @Talesperes for the great help and look sharp, thanks.

Browser other questions tagged

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