使用 PHP Class/function 将 NULL 插入 mySQL-DB 而不是 0000-00-00

Insert NULL to mySQL-DB instead of 0000-00-00 using PHP Class/function

我的 PHP-class/function 将数据添加到我的 mySQL 数据库时遇到一点问题。 html/php 中有一个表单,它在提交时调用一个函数以将数据插入数据库。 表格内有一个日期字段,可以选择填写。

当我现在将表单数据传递给我的函数以插入数据库并且用户没有输入日期时,mySQL 总是将“0000-00-00”插入日期字段(pt_duedate) 而不是 NULL。但如果用户不提供截止日期,我希望 mysql 插入 NULL。如果用户提供日期,我希望 mysql 插入该日期。

我目前的解决方法是触发第二个查询以设置 pt_duedate=NULL,其中 pt_duedate='0000-00-00' 但我认为这不是一个好方法.

我在这里和 Google 上阅读了几个主题,但无法解决我的问题。

希望你们对我有任何ideas/hints。

    public function addDiary($pid, $vals = array() )
    {
        $query = $this->pdo->prepare("INSERT INTO tbl_project_diary SET
                                        pt_date = :date,
                                        pt_category = :category,
                                        pt_type = :type,
                                        pt_responsible = :responsible,
                                        pt_duedate = :duedate,
                                        pt_text = :text,
                                        pid = :pid,
                                        pt_created_by = :created,
                                        pt_updated_by = :updated");
        
        $x=1;
        foreach($vals as $val){
            $val = esc($val);
            $query->bindValue($x, $val);
            $x++;
        }
        $query->bindParam("pid", $pid, PDO::PARAM_INT);
        $query->bindParam("created", $_SESSION['usr_id'], PDO::PARAM_INT);
        $query->bindParam("updated", $_SESSION['usr_id'], PDO::PARAM_INT);
        $query->execute();
    }

**Database table tbl_project_diary**
pt_date DATE
pt_category VARCHAR
pt_type = VARCHAR
pt_responsible = INTEGER
pt_duedate = DATE
pt_text = TEXT
pid = INTEGER
pt_created_by = INTEGER
pt_updated_by = INTEGER

提前致谢! :)

检查字段是否为空并绑定到 null

        foreach($vals as $val){
            $query->bindValue($x, $val == '' ? null : $val);
            $x++;
        }