MySQL tarihi: 0000-00-00 00:00:00

4 Cevap php

Benim sorgu:

       $cselect = mysql_real_escape_string($_POST['cselect']);
       ---------------
       ---------------
       $sql = sprintf("INSERT INTO content
       (id, catID, title, abstract, body, status, published, date, description_meta,   keywords_meta)
        VALUES ('', '%s', '%s','%s','%s','%s','%s','%s','', '' )", $cselect,$chead, $cabst,$ctext, $cp, $cradio,  'TIMESTAMP: Auto NOW()');

tarih çıktı:

0000-00-00 00:00:00

Ne benim sorgu yanlış?

4 Cevap

Bunun yerine sorguda tarihi belirterek bir Timestamp türü için date sütun değiştirmek, ve sonra CURRENT_TIMESTAMP onun varsayılan değer ayarlayabilirsiniz.

Bu şekilde bile MySQL o senin ekleme sorgusu aldığında gerçek tarih takarak, sizin için idare edecek bir kez, sorgularda date sütun ile rahatsız etmek gerek olmazdı.

Here goes the SQL query to change you date column:

ALTER TABLE  `content ` CHANGE  `date`  `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

Bu yardımcı olur umarım.

TIMESTAMP: Auto NOW() kesinlikle bir zaman damgası dize ve MySQL için doğru bir değer değil sessizce (eğer uyarıları kontrol veya katı modunu etkinleştirmek sürece) sıfır timestamp dönüştürür.

Bunun yerine (onun etrafında tırnak işaretleri olmadan) bir fonksiyon NOW() kullanmak ya da daha doğrusu CURRENT_TIMESTAMP gelmelidir.

Bu sizin için sprintf'i kullandığınız herhangi bir nedenle (?) Belki dizeleri olarak tedavi edilecek şeyler zorlayarak dışındaki değerlerden herhangi, biçimlendirme değiliz. Aşağıdaki işlev olmayan versiyonu heredoc kullanarak, çok daha okunabilir olacaktır

$sql = <<<EOL
INSERT INTO content
    (id, catID, title, abstract, body, status, published, date, description_meta, keywords_meta)
VALUES
    ('', '$cselect', '$chead','$cabst','$ctext','$cp','$cradio', NOW(),'', '' );
EOL;

NOW() tarih alanı doldurmak için çağrı unutmayın. Bu sorgu yürütür anda geçerli tarih / saati döndürür.

'Tarih' MySQL ayrılmış bir sözcüktür ve sözdizimi hataları neden olacağını unutmayın. Siz güvenli bir şey alan adını değiştirmek gerekir, ve / veya 'kaçış' için (`) ters tırnakların ile onu çevreleyen.

Yanı sıra, sorgu bina bu şekilde bu bilgilerin herhangi güvenilmeyen kaynaklardan geliyor eğer geniş SQL enjeksiyon açık olduğunuzu gerçeği etrafında almaz unutmayın.

Sen date('Y-m-d h:i:s') yerine kullanabilirsiniz 'timestamp: Otomatik NOW ()' şimdiki zaman almak için.