解决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
相关产品推荐
相关产品推荐

