代码之家  ›  专栏  ›  技术社区  ›  Ying

当post字段为空时,将null插入外键

  •  3
  • Ying  · 技术社区  · 8 年前

    我有一个外键名为parent_id的表。我试图插入如下数据:

     $parent = $_POST['parent_id'] ?? null;
    
            $data = [
                'name' => $_POST['name'],
                'skill_category_id' => $_POST['skill_category_id'],
                'parent_id' => $parent,
            ];
    

    在sql中,我使用如下代码:

    public static function update(array $data): bool
        {
            $sql = 'UPDATE skill_types SET skill_category_id=:skill_category_id, parent_id=:parent_id, name=:name WHERE id=:id';
    
            $db = static::getDB();
            $stmt = $db->prepare($sql);
    
            $stmt->bindValue(':skill_category_id', $data['skill_category_id'], PDO::PARAM_INT);
            $stmt->bindValue(':parent_id', $data['parent_id']);
            $stmt->bindValue(':name', $data['name']);
            $stmt->bindValue(':id', $data['id'], PDO::PARAM_INT);
    
            return $stmt->execute();
        }
    

    我已经在表中设置为空,但它仍然给我错误:

    General error: 1366 Incorrect integer value: '' for column 'parent_id' at row 1'
    

    我怎样才能修好它?

    1 回复  |  直到 8 年前
        1
  •  2
  •   001    8 年前

    问题是 $parent = $_POST['parent_id'] ?? null; 假设页面设置正确, $_POST['parent_id'] 永远不会 null 但可能是空的( '' )所以空合并运算符 ?? 将分配 $parent = ''

    您可以检查该值是否为空:

    $parent = empty($_POST['parent_id']) ? null : $_POST['parent_id'];
    
    推荐文章