Pedrohk 0 Denunciar post Postado Junho 15, 2012 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
mangakah 217 Denunciar post Postado Junho 15, 2012 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
Pedrohk 0 Denunciar post Postado Junho 15, 2012 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
Gabriel Heming 766 Denunciar post Postado Junho 15, 2012 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
Pedrohk 0 Denunciar post Postado Junho 15, 2012 Esses dados estão todos corretos, porém o erro persiste. :/ Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Junho 15, 2012 quais são os nomes das suas tabelas? Compartilhar este post Link para o post Compartilhar em outros sites
Pedrohk 0 Denunciar post Postado Junho 15, 2012 noticias e categorias Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Junho 15, 2012 e das colunas? Compartilhar este post Link para o post Compartilhar em outros sites
mangakah 217 Denunciar post Postado Junho 15, 2012 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
Pedrohk 0 Denunciar post Postado Junho 15, 2012 -- Compartilhar este post Link para o post Compartilhar em outros sites
kevin 1 Denunciar post Postado Junho 15, 2012 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
FernandoPhP 9 Denunciar post Postado Junho 15, 2012 Dá uma olhada nesse post, pode te ajudar a entender como funciona a chave estrangeira. Link não autorizado removido Espero ter ajudado Compartilhar este post Link para o post Compartilhar em outros sites
Pedrohk 0 Denunciar post Postado Junho 16, 2012 Estou criando tudo corretamente, porém no PHPMYAdmin ele não está aceitando colocar a FK de categorias no de noticias, acusa um erro louco de SQL lá! Compartilhar este post Link para o post Compartilhar em outros sites
manolegal 12 Denunciar post Postado Junho 16, 2012 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
Pedrohk 0 Denunciar post Postado Junho 16, 2012 Qual o nome da coluna na tabela noticias que irá ser a chave estrangeira? A coluna idcat da tabela categorias irá ser a FK na tabela notícias. Compartilhar este post Link para o post Compartilhar em outros sites
mangakah 217 Denunciar post Postado Junho 16, 2012 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
Pedrohk 0 Denunciar post Postado Junho 16, 2012 Infelizmente, continua a dar erro após fazer isso. Compartilhar este post Link para o post Compartilhar em outros sites
mangakah 217 Denunciar post Postado Junho 16, 2012 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
Pedrohk 0 Denunciar post Postado Junho 16, 2012 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
manolegal 12 Denunciar post Postado Junho 16, 2012 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