簡體   English   中英

MySQL 日期:0000-00-00 00:00:00

[英]MySQL date: 0000-00-00 00:00:00

在我的查詢中:

       $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()');

日期的輸出是:

0000-00-00 00:00:00

我的查詢有什么問題?

TIMESTAMP: Auto NOW()絕對不是時間戳字符串的正確值,MySQL 會默默地(除非您檢查警告或啟用嚴格模式)將其轉換為零時間戳。

您應該使用NOW()函數(不帶引號)或CURRENT_TIMESTAMP代替。

不要在查詢中指定日期,而是將date列更改為Timestamp類型,然后將其默認值設置為CURRENT_TIMESTAMP

這樣你甚至不需要在你的查詢中打擾date列,一旦 MySQL 會為你處理它,通過在它收到你的插入查詢時插入 UTC 中的實際日期。

這是更改日期列的 SQL 查詢:

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

我希望這有幫助。

您可以使用date('Ymd h:i:s')而不是 'TIMESTAMP: Auto NOW()' 來獲取當前時間。

您為此使用 sprintf() 的任何原因? 除了可能強制將事物視為字符串之外,您沒有格式化任何值。 使用heredoc ,以下非函數版本將更具可讀性

$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()調用以填充日期字段。 這將返回查詢執行時的當前日期/時間。

請注意,'date' 是 MySQL 中的保留字,會導致語法錯誤。 您必須將字段名稱更改為安全的名稱,和/或用反引號 (`) 將其括起來以“轉義”它。

同樣,請注意,這種構建查詢的方式並沒有回避這樣一個事實,即如果這些信息中的任何一個來自不受信任的來源,那么您就會對 SQL 注入持開放態度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM