Ir para conteúdo

POWERED BY:

Arquivado

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

Cícero Martins

Insert NULL e não BRANCO (VAZIO)

Recommended Posts

Olá pessoal,

Tenho um formulário com vários inputs, porém, algumas desses inputs não são obrigatórios.

 

Quando o usuário submete o formulário, eu faço o INSERT.

INSERT INTO tabela (campo1, campo2, campo3) VALUES ('".$_POST["campo1"]."', '".$_POST["campo2"]."', '".$_POST["campo3"]."');

Até aí tudo bem.

 

O que eu quero saber é o seguinte.

O MYSQL só atribui NULL automaticamente para um campo, quando ele não é passado na query, ou seja especificado de forma explícita NULL. Exemplo:


INSERT INTO tabela (campo1, campo2, campo3) VALUES ('".$_POST["campo1"]."', '".$_POST["campo2"]."', NULL);

Só que tenho um problema.

Se o campo3 não for preenchido pelo usuário, eu gostaria que fosse assumido NULL pelo MySQL, porém, no insert ele passa '' (vazio), por que o usuário não preencheu nada.

 

Se eu fizer um if ($_POST["campo3"] == "") { $_POST["campo3"] = NULL; }, também não resolve, pois no INSERT eu utilizo ' (aspas simples), por ser string. No caso, como eu faria, visto que STRINGS obrigatoriamente devem conter ASPAS, então não posso simplesmente retirar as ASPAS da QUERY.

 

 

Sei que há possibilidade de utilização do REPLACE no MySQL, porém, teria algum outro método mais simples?

 

Pensei em criar uma variável $query e ir gerando a consulta nela, concatenando apenas os campos que foram preenchidos, dessa forma, o que não foi preenchido, não entraria na QUERY, então o MySQL atribuiria NULL.

 

Porém, ainda insisto na pergunta. Existe alguma outra forma mais simples?

 

Desde já obrigado à todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma sugestão:

 

Passe a não utilizar as aspas simples no INSERT e coloque-as na instrução que verifica se o valor está vazio:

$campo3 = empty($_POST['campo3']) ? "NULL" : "'{$_POST['campo3']}'";

$sql = "INSERT INTO `banco`.`tabela` (`id`, `campo3`) VALUES (0, {$campo3})";

Ou você também pode simplesmente omitir o campo no INSERT, assim o MySQL irá automaticamente inserir o registro como o valor desse campo em NULL...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando o usuário submete o formulário, eu faço o INSERT.

INSERT INTO tabela (campo1, campo2, campo3) VALUES ('".$_POST["campo1"]."', '".$_POST["campo2"]."', '".$_POST["campo3"]."');

Até aí tudo bem.

 

Será?

 

Você poderia no minimo validar estas entradas!

Compartilhar este post


Link para o post
Compartilhar em outros sites

WDuarte,

Compreendo o que você disse.

Sempre faço consistência das informações. Criei este código rápido apenas pra explicar minha necessidade. Enfim, obrigado por sua contribuição!

 

mangakah,

Compreendi! Obrigado pela dica! Vou tentar. Você pode me dizer o por que das crases no nome dos campos e da tabela? O que diferencia do NÃO USO das crases? Nunca usei e nunca tive problemas, porém, é sempre bom entender e compreender o motivo do uso!

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode me dizer o por que das crases no nome dos campos e da tabela? O que diferencia do NÃO USO das crases? Nunca usei e nunca tive problemas, porém, é sempre bom entender e compreender o motivo do uso!

Serve para indicar que determinada palavra não faz parte da linguagem SQL, para se evitar assim erros de sintaxe se você tiver um identificador (nome) de banco de dados, tabela, coluna, etc. que seja uma palavra-chave reservada da linguagem SQL.

 

Se você tiver uma base de dados chamada "database" e quiser excluí-la...

DROP DATABASE database
Irá retornar erro e não executará o comando, pois a palavra 'database' faz parte da linguagem.

 

Mas se você colocar assim, vai OK:

DROP DATABASE `database`

É recomendável sempre usar isso para assegurar que o código SQL seja compatível mesmo com versões futuras do MySQL, que podem trazer novas palavras reservadas que pode ser confundidas com identificadores.

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.