在我的查询中:
$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
我的查询有什么问题?
答案 0 :(得分:4)
TIMESTAMP: Auto NOW()
绝对不是时间戳字符串的正确值,MySQL默默地(除非您检查警告或启用严格模式)将其转换为零时间戳。
您应该使用函数NOW()
(不带引号)或更确切地说CURRENT_TIMESTAMP
。
答案 1 :(得分:2)
不是在查询中指定日期,而是将date
列更改为Timestamp
类型,然后将其默认值设置为CURRENT_TIMESTAMP
。
这样你甚至不需要在查询中使用date
列,一旦MySQL将为你处理,通过在收到插入查询时插入实际日期。
以下是SQL查询以更改日期列:
ALTER TABLE `content ` CHANGE `date` `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
我希望这会有所帮助。
答案 2 :(得分:1)
您可以使用date('Y-m-d h:i:s')
代替'TIMESTAMP:Auto NOW()'来获取当前时间。
答案 3 :(得分:1)
你为什么使用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注入非常开放。