Ir para conteúdo

POWERED BY:

Arquivado

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

antonio_milat

Inserir valor null em campo date (postgreSQL)

Recommended Posts

Olá.

 

Tenho um formulário com um campo do tipo data que não é obrigatório.

 

Eu utilizo o seguinte código para o insert:

$sql = "INSERT INTO tabela (data) VALUES ('".$this->getData()."')";

Quando o campo do formulário é preenchido, o INSERT funciona corretamente, mas quando não é preenchido ocorre o erro abaixo:

ERROR: invalid input syntax for type date: ""

Quando eu insiro o campo nulo diretamente no banco, também funciona:

INSERT INTO tabela (data) VALUES (null);

Então, tentei colocar desta forma:

public function getData(){
   if ($this->data == ''){
      return null;
   } else {
      return $this->data;
   }
}

Mas o erro persiste (se retornar null como string "null" também).

 

A forma que encontrei para solucionar meu problema foi este:

$sql = "INSERT INTO tabela (data) VALUES ";

if ($this->getData() == ''){
   $sql .= "(null)";
} else {
   $sql .= "('".$this->getData()."')";
}

Esta funcionando, mas acredito que não seja a melhor maneira de se resolver.

Alguém saberia uma forma menos gambiarristica de inserir o valor nulo no campo tipo date?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Foi mal não li direito a descrição do tópico. O que postei iria funcionar para MySql.

Para o Postgres fiz um pequeno teste.

create table t(
data timestamp default  null
);

Vê se consegue dar insert into.

 

Veja a saída do die($sql);

$sql = "INSERT INTO tabela (data) VALUES ('".$this->getData()."')";

die($sql);

Compartilhar este post


Link para o post
Compartilhar em outros sites

if ($this->getData() == ''){
   $sql .= "(null)";
} else {
   $sql .= "('".$this->getData()."')";
}
esta não é a melhor forma de resolver, pensando apenas em OO, pq o próprio método getData() deveria se encarregar de devolver a data ou a string com "NULL".

 

Assim, esse "if" não ficaria exposto ai fora.

Compartilhar este post


Link para o post
Compartilhar em outros sites

se o campo for null, pra que você vai inserir no db?

 

Default null quer dizer que se o campo nao for "preenchido/setado" ele terá seu valor= 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.