我有一个外键名为 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/