realmente peço desculpas por não ter mencionado isso, mas estou trabalhando com tabelas innoDB. Pra falar a verdade, estava batendo cabeça com esse sistema neste fim de semana e consegui fazer funcionar, mas gostaria que vocês da lista dessem uma olhada, pois não sei se foi a melhor solução. Até mesmo porque, esse é a 1ª vez que eu deixo de trabalhar com tabelas MyISAM e implemento o controle de transações, então ainda sou iniciante nesse assunto. A minha função ficou exatamente como segue abaixo. Se puderem dar sugestões de melhoria, serei muito grato.
function cadastrarUsuarioDAO($arrayDados) {
$status = false;
try{
$conexao = Conexao::ConectarNoBanco();
//Inicia o controle de transações
$conexao->beginTransaction();
//Cadastra os dados da tabela 'usuario'
$sql1 = "insert into usuario (nome, cpf, sexo, datanascimento, login, senha) values (:Nome, :Cpf, :Sexo, :DataNascimento, :Login, :Senha)";
$sth1 = $conexao->prepare($sql1);
$sth1->bindValue(":Nome",$arrayDados['txtNome']);
$sth1->bindValue(":Cpf",$arrayDados['txtCpf']);
$sth1->bindValue(":Sexo",$arrayDados['rbtSexo']);
$sth1->bindValue(":DataNascimento",$arrayDados['txtNascimento']);
$sth1->bindValue(":Login",$arrayDados['txtLogin']);
$sth1->bindValue(":Senha",$arrayDados['txtSenha']);
$sth1->execute();
$ultimoIdInserido = $conexao->lastInsertId();
if ($ultimoIdInserido != 0) {
//Cadastra os dados da tabela 'endereco'
$sql2 = "insert into endereco (idusuario, idhospital, idbairro, logradouro, numerocasa, complemento) values (:IdUsuario, :IdHospital, :IdBairro, :Logradouro, ucase(:NumeroCasa), :Complemento)";
$sth2 = $conexao->prepare($sql2);
$sth2->bindValue(":IdUsuario",$ultimoIdInserido);
$sth2->bindValue(":IdHospital",null);
$sth2->bindValue(":IdBairro",$arrayDados['selectBairro']);
$sth2->bindValue(":Logradouro",$arrayDados['selectTipoLogradouro']." ".$arrayDados['txtEndereco']);
$sth2->bindValue(":NumeroCasa",$arrayDados['txtNumero']);
$sth2->bindValue(":Complemento",$arrayDados['txtComplemento']);
if ($sth2->execute()) {
//Cadastra os dados da tabela 'email'
$sql3 = "insert into email (idusuario, idcontatohospital, email) values (:IdUsuario, :IdContatoHospital, lcase(:Email))";
$sth3 = $conexao->prepare($sql3);
$sth3->bindValue(":IdUsuario",$ultimoIdInserido);
$sth3->bindValue(":IdContatoHospital",null);
$sth3->bindValue(":Email",$arrayDados['txtEmail']);
if ($sth3->execute()) {
//Cadastra os dados da tabela 'telefone'
$sql4 = "insert into telefone (idusuario, idcontatohospital, telefone) values (:IdUsuario, :IdContatoHospital, :Telefone)";
$sth4 = $conexao->prepare($sql4);
$sth4->bindValue(":IdUsuario",$ultimoIdInserido);
$sth4->bindValue(":IdContatoHospital",null);
$sth4->bindValue(":Telefone",$arrayDados['txtTelefone']);
if ($sth4->execute()) {
//Verifica o perfil de usuário informado
switch ($arrayDados['selectTipoUsuario']) {
case "1" : //Perfil 'Médico'
//Cadastra os dados da tabela 'usuariomedico'
$sql5 = "insert into usuario_medico (idusuario, crm, especialidade) values (:IdUsuario, :Crm, :Especialidade)";
$sth5 = $conexao->prepare($sql5);
$sth5->bindValue(":IdUsuario",$ultimoIdInserido);
$sth5->bindValue(":Crm",$arrayDados['txtCrm']);
$sth5->bindValue(":Especialidade",$arrayDados['txtEspecialidade']);
break;
default : //Outros perfis
//Cadastra os dados da tabela 'usuariogeral'
$sql5 = "insert into usuario_geral (idusuario, idtipousuario) values (:IdUsuario, :IdTipoUsuario)";
$sth5 = $conexao->prepare($sql5);
$sth5->bindValue(":IdUsuario",$ultimoIdInserido);
$sth5->bindValue(":IdTipoUsuario",$arrayDados['selectTipoUsuario']);
break;
}
if ($sth5->execute()) {
$status = true;
}
}
}
}
}
if ($status) {
//Commita a transação
$conexao->commit();
} else {
//Cancela a transação
$conexao->rollBack();
}
}catch (PDOExecption $e){
echo "erro: ".$e;
$conexao->rollBack();
}
$conexao = null;
return ($status) ? true : false;
}
Valeu!!!!!!!!