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

添加Submitted_Date字段后MySQL表单提交报错求助

问题分析与解决方案

核心问题总结

  • 输入仅年份(如2022)时,strtotime无法解析为有效日期,生成错误格式值触发MySQL日期校验报错
  • 空输入时,strtotime('')返回0,对应date('Y-m-d')生成1970-01-01,不符合存储NULL的需求
  • 参数绑定类型错误:Submitted_Date是日期字符串,却用了整数类型i,导致字段不匹配错误
  • 空值处理逻辑顺序颠倒,且错误传入字符串"NULL",而非PHP原生null值

修正步骤

  1. 调整日期处理顺序:先判断输入是否为空,为空直接设为null,否则再做格式转换
  2. 修正参数绑定类型:将绑定类型从"ssii"改为"sssi"(Submitted_Date对应字符串类型s)
  3. 增加日期有效性校验:过滤无效日期输入,避免触发数据库错误

修正后的代码

<?php
if (isset($_POST['submit'])) {      
    $sql = $conn->prepare("UPDATE orders SET Publisher_Email=? , Client_Name=? , Submitted_Date=? WHERE PC_Job_Number=?");
    
    $Publisher_Email = $_POST['Publisher_Email'];
    $Client_Name = $_POST['Client_Name'];
    
    // 处理日期字段:空输入设为null,否则解析并校验有效性
    $Submitted_Date = null;
    if (!empty($_POST['Submitted_Date'])) {
        $timestamp = strtotime($_POST['Submitted_Date']);
        if ($timestamp !== false) {
            $Submitted_Date = date('Y-m-d', $timestamp);
        } else {
            $error_message = "请输入有效的日期格式";
            goto end_update;
        }
    }

    // 绑定参数:类型对应字符串、字符串、字符串/NULL、整数
    $sql->bind_param("sssi", $Publisher_Email, $Client_Name, $Submitted_Date, $_GET["PC_Job_Number"]);  
    
    if($sql->execute()) {
        $success_message = "Edited Successfully";
    } else {
        $error_message = "Problem in Editing Record: " . $conn->error;
    }
end_update:
}

$sql = $conn->prepare("SELECT * FROM orders WHERE PC_Job_Number=?");
$sql->bind_param("i",$_GET["PC_Job_Number"]);           
$sql->execute();
$result = $sql->get_result();

if ($result->num_rows > 0) {        
    $row = $result->fetch_assoc();
}
$conn->close();
?>

额外说明

  • MySQL的DATE类型严格要求YYYY-MM-DD格式,确保转换后的值符合规范
  • 传入PHP原生null时,mysqli会自动映射为MySQL的NULL,无需手动传入字符串"NULL"
  • 日期有效性校验可拦截无效输入(如单独年份、乱码字符),避免数据库报错

内容的提问来源于stack exchange,提问作者Sandy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 23:01:32