Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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?
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"
Ele esta definido como default NULL, mas mesmo assim, não me deixa.
Você precisa setar ele como NULO e definir também o valor padrão como NULL
Tente assim:
$data = date('Y/m/d');
'data' => $data,
Base de dados:
data DATE NULL DEFAULT NULL,
mas wagner, eu não quero gravar nada neste campo ainda, e a base esta como tu postou ali...
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';
} $dataFormato = explode("/",$data);
$data = '"'.$dataFormato[2].'-'.$dataFormato[1].'-'.$dataFormato[0].'"';
}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';
} $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.
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');
}>
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:
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.
Que bom que aprendi também!!!
>
Meu querido! :blink:
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...
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
Você definiu algum valor para o campo como "not null"?