Ir para conteúdo

Arquivado

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

rpmarques

Gravar data em branco

Recommended Posts

Buenas, retornei depois de um tempo fora do mundo digital, estou aqui uma dúvida simples, mas não consigui solucionar, estou tentando gravar em um campo tipo data só que sem conteúdo, vazio, só que me retorna o seguinte erro:

Invalid datetime format: 1292 Incorrect date value: '' for column 'data_pg' at row 1

como vcs fazem pra gravar um campo data como vazio?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não se grava data em BRANCO, a não ser que o campo esteja definido como NULL. Do contrário, você deverá obedecer o formato "0000-00-00"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele esta definido como default NULL, mas mesmo assim, não me deixa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas wagner, eu não quero gravar nada neste campo ainda, e a base esta como tu postou ali...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente assim

Insert:

$insere = 'INSERT INTO tabela (coluna_1, coluna_2, coluna_3)
VALUES ("'.$string_1.'", "'.$string_2.'", '.$data.')';
if(is_null($data)){
    $data = 'NULL';
}
else{
    $dataFormato = explode("/",$data);
    $data = '"'.$dataFormato[2].'-'.$dataFormato[1].'-'.$dataFormato[0].'"';
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você quem está fazendo algo errado. O seu próprio erro diz que o valor 1292 é incorreto para o tipo date, ou seja, de alguma forma esse valor está tentando ser inserido ao banco de dados. Se seu campo estiver com as configurações adequadas, não há como dar erro.

Tente assim

Insert:

$insere = 'INSERT INTO tabela (coluna_1, coluna_2, coluna_3)
VALUES ("'.$string_1.'", "'.$string_2.'", '.$data.')';
if(is_null($data)){
    $data = 'NULL';
}
else{
    $dataFormato = explode("/",$data);
    $data = '"'.$dataFormato[2].'/'.$dataFormato[1].'/'.$dataFormato[0].'"';
}

O valor correto para gravação no campo date é o padrão americano 0000-00-00, da forma como você sugeriu vai dar erro de padrão incorreto da mesma forma.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas daí, basta colocar num bloco try

E também corrigi o o caractere /

try {
   $data = explode('/', $data);
   $data = $data[2].'-'.$data[1].'-'.$data[0];

}  catch (Exception $e) {
        $data = date('Y/m/d'); 
}

Meu querido! :blink:

Estendendo exceções

O PHP 5 possui um modelo de exceções similar ao de outras linguagens de programação. Uma exceção pode ser lançada (throw) e capturada (catch). Código pode ser envolvido por um bloco try para facilitar a captura de exceções potenciais. Cada bloco try precisa ter ao menos um bloco catch ou finally correspondente.

O objeto lançado precisa ser uma instância da classe Exception ou uma subclasse de Exception. Tentar lançar um objeto sem essa ascendência resultará em um erro fatal.

Ou seja, se você espera um valor e este não é como esperado, ai sim você lança o erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que bom que aprendi também!!!

Meu querido! :blink:

Estendendo exceções

O PHP 5 possui um modelo de exceções similar ao de outras linguagens de programação. Uma exceção pode ser lançada (throw) e capturada (catch). Código pode ser envolvido por um bloco try para facilitar a captura de exceções potenciais. Cada bloco try precisa ter ao menos um bloco catch ou finally correspondente.

O objeto lançado precisa ser uma instância da classe Exception ou uma subclasse de Exception. Tentar lançar um objeto sem essa ascendência resultará em um erro fatal.

Ou seja, se vocẽ espera um valor e este não é como esperado ai sim você lança o erro.

;)
Valeu Williams...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então... Um exemplo basico seria + ou - assim

$data = '16/09/2016';

//Reverte para formato americano
$data_db = implode('-', array_reverse(explode('/', $data)) );


try {

  //Espera que o formato seja 0000-00-00 para gravar no Banco
  if (!preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/",$data_db))
  {
      throw new Exception("Esta data é inválida", 1);
      
  }
  
} catch (Exception $e) {
   echo $e->getMessage();
}

No ideone formato valido

http://ideone.com/mvfz5P




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.