php - 当 POST 字段为空时,将 NULL 插入外键

标签 php mysql

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

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

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

我该如何解决?

最佳答案

问题是 $parent = $_POST['parent_id'] ?? null; 假设您的页面设置正确,$_POST['parent_id'] 永远不会是 null 但可能是空的 ('')。因此空合并运算符 ?? 将分配 $parent = ''。这不是 int 的有效值。

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

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

关于php - 当 POST 字段为空时,将 NULL 插入外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50611798/

相关文章:

php - 根据日期获取总金额

php - 使用 UNION 的 MySQL 查询 - PHP PDO 问题

php mysql 查询一次将字段名称及其数据提取到表中

php - CodeIgniter 添加和更新数据库没有成功,没有错误,没有,只是不会工作

mysql表模式到实际表

mysql - 具有逗号分隔列表的数据库列的语法 - mySQL `IN` 运算符

php - 为什么我不应该在生产环境中运行 'composer update'?

php - 使用 PDO 进行行计数

php - 在 php 中创建 2 个相互依赖的下拉菜单

mysql - LEFT JOIN 成为隐式连接我如何修复它?