Ir para conteúdo

POWERED BY:

Arquivado

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

John Emanuel

Inserção de dados com chaves estrangeira PDO

Recommended Posts

Olá galera sou novo no php estou engatiando ainda, estou a 20 dias neste novo mundo da programação, estou estudando PDO. no entanto estou com um problema que está tirando o meu sono, pois nao achei a lógica para fazer inserção no banco de dados com chave estrangeira, eu consigo fazer a inserção sem a chave estrangeira, mais com ela relacionada esta sendo bronca. Quando faço a inserção pelo banco no phpmyadmin ele funciona perfeitamente.

 

Este é o código:

 

<?php
# INSERIR
if(isset($_POST['enviar'])){


$placa_obs = $_POST["placa_obs"];
$placa_nv = $_POST["placa_nv"];
$acess_nv = $_POST["acess_nv"];
$acess_obs = $_POST["acess_obs"];

$sql = 'INSERT INTO instrumentousf.estrutura (id_unidade ,placa_obs ,placa_nv ,acess_nv ,acess_obs) ';


$sql .= 'VALUES (:id_unidade, :placa_obs, :placa_nv, :acess_nv, :acess_obs)';


try {
$inserir = $db->prepare($sql);

$inserir->bindValue(':placa_nv', $placa_nv, PDO::PARAM_STR);
$inserir->bindValue(':placa_obs', $placa_obs, PDO::PARAM_STR);
$inserir->bindValue(':acess_obs', $acess_obs, PDO::PARAM_STR);
$inserir->bindValue(':acess_nv', $acess_nv, PDO::PARAM_STR);
if($inserir->execute()){
echo "<div class='alert alert-success'>
<button type='button' class='close' data-dismiss='alert'>×</button>
<strong>Parabens inserido com sucesso!</strong>
</div>";
}
} catch (PDOException $e) {
echo "<div class='alert alert-error'>
<button type='button' class='close' data-dismiss='alert'>×</button>
<strong>Nao foi possivel inserir!</strong>" . $e->getMessage() . "
</div>";
}

}

 

 

 

Segue o banco

 

CREATE TABLE IF NOT EXISTS `equipamentos` (
`id_equipamentos` int(11) NOT NULL AUTO_INCREMENT,
`id_unidade` int(11) NOT NULL,
`mesa_eq` enum('SIM','NAO') NOT NULL,
`mesa_obs` text NOT NULL,
PRIMARY KEY (`id_equipamentos`),
KEY `id_unidade` (`id_unidade`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

 

CREATE TABLE IF NOT EXISTS `estrutura` (
`id_estrutura` int(11) NOT NULL AUTO_INCREMENT,
`id_unidade` int(11) NOT NULL,
`placa_obs` text NOT NULL,
`placa_nv` varchar(50) NOT NULL,
`acess_nv` varchar(250) NOT NULL,
`acess_obs` text NOT NULL,
PRIMARY KEY (`id_estrutura`),
KEY `id_est_unidade` (`id_unidade`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;

 

CREATE TABLE IF NOT EXISTS `unidade` (
`id_unidade` int(11) NOT NULL AUTO_INCREMENT,
`unidade` varchar(60) NOT NULL,
`atendente` varchar(60) NOT NULL,
`data` date NOT NULL,
PRIMARY KEY (`id_unidade`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Camarada, você precisa recuperar o valor dessa chave estrangeira e inseri-la na tabela ESTRUTURA como um dado comum, junto com os demais. Não há nenhuma variável $id_unidade recuperando esse valor, nenhum bindValue pra ela... Aí não vai mesmo.

 

Por exemplo: se tivéssemos uma tabela PESSOAS, você poderia pesquisar o ID desejado através de um CPF ou CNPJ (SELECT) e usá-lo na nova tabela como chave estrangeira (INSERT).

 

Outra opção seria o lastInsertId(). Por exemplo, se você acabou de inserir algo na tabela UNIDADE (INSERT) e quer pegar a chave primária gerada para usá-la na tabela ESTRUTURA (como chave estrangeira), poderá fazer o seguinte:

 

if($inserir->execute()){
    echo "Blablabla";

    $id = $db->lastInsertId();
}

 

Essa variável $id agora contém o seu id_unidade, o qual deverá ser passado junto com os demais valores no seu INSERT.

 

Espero ter ajudado. Bons estudos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

aprendizhtm, Obrigado pela ajuda vou tentar fazer desta forma, cara esse lance de programação é muito louco, o cara vai dormir pensando em como resolver e acorda da mesma forma. Vou tentar qualquer coisa eu passo o resultado.

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.