Ir para conteúdo

POWERED BY:

Arquivado

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

Pedrohk

Foreign Key - Código e PHPMyAdmin

Recommended Posts

Tenho uma tabela de notícias e uma tabela de categorias.

Cada notícia tem sua categoria, logo deveria possuir o id de categorias como sua chave estrangeira.

 

Mas no PHPMyAdmin, como adiciono uma chave estrangeira?

Estava usando ele ali e não achei essa opção. Como procedo.

Vou mostrar os códigos que tenho aqui de ambas as tabelas para inserção de dados no PHP.

 

Tabela Notícia

public function inserir($noticia){
		$com=$this->conexao->prepare("
		insert into noticias(id,titulo,texto,data,hora) values (null,?,?,?,?) ");

		$com->bindValue(1, $noticia -> titulo);
		$com->bindValue(2, $noticia -> texto);
		$com->bindValue(3, $noticia -> data);
		$com->bindValue(4, $noticia -> hora);
		$com->execute();

		return $com->errorCode();
}

 

Tabela Categoria

public function inserir($cat){
		$com = $this -> conexao -> prepare("
		insert into categorias(id,nome) values(null,?)");
		$com->bindValue(1, $cat -> nome);
		$com->execute();
		return $com -> errorCode();
}

 

E depois que alterar no PHPMyAdmin como procederia o código de inserir da notícia?

 

Obrigado desde já.

=D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para ver/editar FK no phpMyAdmin: clique no BD -> Tabela -> Estrutura -> Ver Relações (fica ao lado de "Visualização para impressão").

 

Desculpe, eu não entendi suas outras perguntas... poderia explicar melhor?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, achei aqui a opção, porém quando eu mando ele adicionar o campo id da categoria na tabela notícia ele dá um erro.

 

Mensagens do MySQL : Documentação

#1452 - Cannot add or update a child row: a foreign key constraint fails (`jornal`.<result 2 when explaining filename '#sql-1824_54'>, CONSTRAINT `#sql-1824_54_ibfk_1` FOREIGN KEY (`id`) REFERENCES `categorias` (`id`))

 

E não adiciona o campo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existem algumas restrições na hora de usar FK no Mysql. Ambas as tabelas necessitam estar com a Engine em InnoDB e ambas as colunas necessitam ter index. Como uma chave estrangeira é sempre direcionada a chave primária de uma tabela, uma é óbvio que vai possuir, por ser uma PK. A outra coluna, você deve colocar um index apenas com a opção index.

Compartilhar este post


Link para o post
Compartilhar em outros sites

quais são os nomes das suas tabelas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

e das colunas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenha certeza de que o campo da tabela categorias é uma chave-primária ou um índice (se não for, selecione ele e clique no botão INDICE, para criar um indice -- isso na aba Estrutura)

 

Se há dados na tabela, certique-se de que todos sejam válidos e não haja dados nulos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

eu acredito que o problema seja que você não tem o campo referencia da chave estrangeira na tabela noticias, porém nada melhor que um exemplo, segue:

 


CREATE  TABLE IF NOT EXISTS categorias (
id INT(10)  NOT NULL AUTO_INCREMENT ,
nome VARCHAR(255) NOT NULL ,
PRIMARY KEY (id)
)ENGINE=InnoDB;

CREATE  TABLE IF NOT EXISTS noticias (
id INT(10)  NOT NULL AUTO_INCREMENT ,
id_categoria int(10) NOT NULL,
titulo VARCHAR(255) NOT NULL ,
texto TEXT NOT NULL ,
data DATETIME NOT NULL ,
PRIMARY KEY (id) ,
CONSTRAINT fk_categoria
FOREIGN KEY (id_categoria)
REFERENCES categorias (id)
)ENGINE=InnoDB;

 

 

teste e veja se funciona, analise as diferenças para encontrar o erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual o nome da coluna na tabela noticias que irá ser a chave estrangeira?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na tabela notícias você tem que ter uma coluna para referenciar o id da categoria daquela notícia, como o kevin diz.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Infelizmente, continua a dar erro após fazer isso.

 

 

Se não houverem dados armazenados nessas tabelas, apague-as e use o código SQL do kevin para criar as tabelas já com a FK.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, agora funcionou, agora no meu SQL do PHP terei que adicionar como.

 

public function inserir($noticia){
$com=$this->conexao->prepare("
insert into noticias(id,titulo,texto,data,hora) values (null,?,?,?,?) ");

$com->bindValue(1, $noticia -> titulo);
$com->bindValue(2, $noticia -> texto);
$com->bindValue(3, $noticia -> data);
$com->bindValue(4, $noticia -> hora);
$com->execute();

       return $com->errorCode();
}

 

Terei que colocar "insert into noticias (id,id_categoria,titulo,texto,data,hora) values (null,null,?,?,?,?) ");

A FK fica Null também?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Algo tipo

insert into noticias(titulo,texto,data,hora,categoria_id) values ($titulo,$texto,$data,$hora,$categoria) ");

 

Como a chave primaria é autoincremento não precisa inseri-la. Você precisa inserir o id da categoria da noticia (chave estrangeira) na tabela de noticias.

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.