У меня есть таблица с именем внешнего ключа 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'
как я могу это исправить?
вам нужно установить значение 0, а не null, потому что настройка - это int.
если я конвертирую в целое число, это дает мне ошибку SQLSTATE [23000]: Нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется (perwita.skill_types, ОГРАНИЧЕНИЕ skill_types_parent_id_foreign FOREIGN KEY (parent_id) ССЫЛКИ skill_types (id) ON ОБНОВЛЕНИЕ КАСКАДА) '
Вот почему мне нужно установить его в ноль. не 0
$parent = empty($_POST['parent_id']) ? null : $_POST['parent_id'];@JohnnyMopp это работает, спасибо. Вы можете поставить его на ответ, если хотите, чтобы я мог выбрать его как правильный ответ.
Я предлагаю изменить заголовок на «Вставить NULL, когда поле POST пусто». Это может помочь другим пользователям с той же проблемой найти этот вопрос.






Проблема в $parent = $_POST['parent_id'] ?? null;. Если ваша страница настроена правильно, $_POST['parent_id'] никогда не будет null, но может быть пустым (''). Таким образом, нулевой оператор объединения ?? назначит $parent = ''. И это недопустимое значение для int.
Вы можете проверить, пусто ли значение:
$parent = empty($_POST['parent_id']) ? null : $_POST['parent_id'];
$parent = $_POST['parent_id'] ?? null;- вполне возможно, что$parentбудетnull, но сообщение об ошибке указывает, что столбец ожидает целое число. Я считаю, что вам нужно преобразовать его в целое число и / или установить тип данных;PDO::PARAM_INT