You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决CMS后台插入当前DateTime到数据库时存为0000-00-00 00:00:00的问题

解决MySQL DATETIME字段存储为0000-00-00 00:00:00的问题

你的问题核心是日期格式不匹配:你前端显示的日期格式d-m-Y @ h:i A(比如05-10-2024 @ 03:45 PM)并不符合MySQL DATETIME字段要求的YYYY-MM-DD HH:MM:SS标准格式,MySQL无法解析这个字符串,所以只能存储默认的无效值0000-00-00 00:00:00。

下面给你几个可靠的解决方案:

方案1:直接使用MySQL内置函数(推荐)

完全不需要在PHP里处理日期,直接在INSERT语句中用MySQL的NOW()函数,它会自动插入当前服务器的时间,既准确又避免格式问题:

<?php
date_default_timezone_set('Asia/Kolkata');
if($_POST['submit']) {
    // 强烈建议用预处理语句防止SQL注入!
    $stmt = $pdo->prepare("INSERT INTO your_table_name (published_datetime) VALUES (NOW())");
    $stmt->execute();
}
?>

如果数据库时区和PHP时区不一致,可以用CONVERT_TZ(NOW(), 'UTC', 'Asia/Kolkata')转换到印度时区。

方案2:在PHP中生成MySQL兼容的日期格式

如果你需要在PHP中控制时间(比如不是当前时间),要生成Y-m-d H:i:s格式的字符串,前端可以显示友好格式,但提交时传递数据库兼容的格式:

<?php
date_default_timezone_set('Asia/Kolkata');
// 生成MySQL兼容的格式
$mysql_datetime = date('Y-m-d H:i:s');
// 前端显示给用户的友好格式
$display_datetime = date('d-m-Y @ h:i A');
?>
<p>Published DateTime : <?php echo $display_datetime; ?></p>
<input type="hidden" name="dt" value="<?php echo $mysql_datetime; ?>" />

<?php
if($_POST['submit']) {
    $dt = $_POST['dt'];
    // 同样用预处理语句避免风险
    $stmt = $pdo->prepare("INSERT INTO your_table_name (published_datetime) VALUES (?)");
    $stmt->execute([$dt]);
}
?>

重要提醒:防范SQL注入

你当前直接将$_POST['dt']拼接到SQL语句中的写法存在严重的SQL注入漏洞!一定要使用预处理语句(PDO或MySQLi都支持),永远不要直接拼接用户输入到SQL里。

内容的提问来源于stack exchange,提问作者Er Mantu Suna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:44:49