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

inb24sb2  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(323)

我有一个外键名为parent\u 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();
    }

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

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

我该怎么修?

c9qzyr3d

c9qzyr3d1#

问题是 $parent = $_POST['parent_id'] ?? null; 假设页面设置正确, $_POST['parent_id'] 永远不会 null 但可能是空的( '' ). 所以空凝聚算子 ?? 将分配 $parent = '' . 这不是int的有效值。
您可以检查值是否为空:

$parent = empty($_POST['parent_id']) ? null : $_POST['parent_id'];

相关问题