Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
Se deixar o campo com o defaul = null não funciona?
A única restrição é que a data irá ficar com o valor "0000-00-00"
Eu tentei setar o default como null e também não funcionou.
se o campo for null, pra que vc vai inserir no db?
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);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.
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