Ir para conteúdo

POWERED BY:

Arquivado

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

marcelpsaraiva

Como adicionar valor null em uma chave estrangeira?

Recommended Posts

Fala pessoal! Tenho duas tabelas como mostrado abaixo:

CREATE TABLE `leiame` (
 `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
 `number` INT(10) NOT NULL,
 `title` VARCHAR(100) NOT NULL,
 PRIMARY KEY (`id`) )

 CREATE TABLE `download` (
 `id` INT(10) NOT NULL AUTO_INCREMENT,
 `name` VARCHAR(100) NOT NULL,
 `id_leiame` INT(10) UNSIGNED NULL,
 PRIMARY KEY (`id`),
CONSTRAINT `leia_id_fk` FOREIGN KEY (`id_leiame`) REFERENCES `leiame` (`id`) ON UPDATE CASCADE )

Como vocês podem perceber, o atributo id_leiame da tabela download referencia o atributo id da tabela leiame. Aliás, eu setei o id_leiame como NULL, ou seja, aceitando valores nulos.

 

Porém, quando eu insiro um valor null no id_leiame, ocorre o seguinte erro:

Cannot add or update a child row: a foreign key constraint fails (`bd`.`download`, CONSTRAINT `leia_id_fk` FOREIGN KEY (`id_leiame`) REFERENCES `leiame` (`id`) ON UPDATE CASCADE)

Pesquisei na internet, e vi que sim, a chave estrangeira aceita valores nulos, se setadas como NULL ... O que foi o meu caso.

E se eu insiro algum valor no id_leiame, funciona! E se colocar como 'null', não funciona!

 

O que poderia estar errado??

 

Valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi pessoal!

 

segue o insert

$name = $_POST['name'];
$id_leiame = $_POST['leiaID'];
        
$name = addslashes($name);

$crud = new crud('download');
$crud->inserir("name,id_leiame", "'$name','$id_leiame'");

o leiaID é um combobox. Vejam abaixo:

<label>Leia-me:</label>
<select name="leiaID"">
      <option value="<?php echo $leiame['id']; ?>"><?php echo $leiame['nome'];  ?></option>
</select>

A string 'null' é diferente de null / NULL

 

Eu tentei de todas as formas: 'null', null, NULL, 'NULL' e nenhum deles funcionou!


 

Não seria

`id_leiame` INT(10) UNSIGNED default NULL,

 

Sim ... está marcado como NULL o default ... nada adiantou ... o que pode ser gente ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

E o comando que é enviado ao banco , como fica ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

E o comando que é enviado ao banco , como fica ?

 

o comando funciona tranquilo.

 

Eu fiz um teste aqui ... se eu selecionar uma opção no combobox, as informações são inseridas corretamente.

 

Agora, se eu não selecionar nenhuma opção no combobox, o erro ocorre ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não há uma opção que seja default? Para isso ocorrer, um dos options (nem que esteja com o texto "SELECIONE UMA OPÇÃO") deve estar com o atributo "selected", caso contrário não haverá uma opção selecionada.

 

No formulário...

Compartilhar este post


Link para o post
Compartilhar em outros sites
E o comando que é enviado ao banco , como fica ?

 

 

Quis dizer você tem o comando INSERT que é enviado ao Banco , o que é montado ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta, pelo que eu analisei1, analisei2 e analisei3, o comando [inline]$crud->inserir("name,id_leiame", "'$name','$id_leiame'");[/inline] deve ficar da seguinte forma: [inline]INSERT INTO `leiame` (`name`, `id_leiame`) VALUES ('exemplo', 'null')[/inline].

 

Foi o que eu quis dizer com 'null' é diferente de null.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deveria ser

INSERT INTO `leiame` (`name`, `id_leiame`) VALUES ('exemplo', '')

ou

INSERT INTO `leiame` (`name`) VALUES ('exemplo'   )

Compartilhar este post


Link para o post
Compartilhar em outros sites

ou ainda:

insert into leiame(name, id_leiame) values('teste', null);

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.