Я работаю над установкой отношения внешних ключей между двумя таблицами в phpMyAdmin на моем сервере cPanel - я просто назову их «родителями» и «дочерними», чтобы все было просто. В дочерней таблице у меня есть столбец parent_id, который я хочу заполнить номерами идентификаторов из родительской таблицы. Я следил за несколькими учебниками по этому вопросу, но он просто не работает - новые записи создаются, но столбец parent_id на дочерней таблице остается NULL.phpMyAdmin - внешний ключ не работает
Данные формы html передаются на PHP, который вставляет данные в две отдельные таблицы, родительские и дочерние, в одном и том же действии. Родительские и дочерние таблицы по сути являются дубликатами, но в будущем я, вероятно, буду добавлять дополнительные дочерние таблицы, следовательно, потребность в отношении внешних ключей - в основном, в мастер-таблице с несвязанными локальными таблицами.
В phpMyAdmin я установил механизм хранения как родительских, так и дочерних таблиц в InnoDB. В дочерней таблице я добавил столбец parent_id, установил по умолчанию значение NULL и допустил NULL. Затем я проиндексировал этот столбец и установил ограничение внешнего ключа на «parent». 'ID'. phpMyAdmin автоматически генерирует имя ограничения, 'child_ibfk_1'. ON DELETE и ON UPDATE установлены на каскад.
Когда я создаю новую запись, обе таблицы заполняются правильно, но столбец parent_id в дочерней таблице имеет значение NULL, а не идентификатор родителя.
Может ли кто-нибудь увидеть, что я делаю неправильно здесь? Огромное спасибо.
Edit - PHP вставка заявление:
$sql = "INSERT INTO parent (date, time, latitude, longitude, accuracy, species, deadinjured, sex, age, name, contact_info, notes, source)
VALUES ('$date', '$time', '$latitude', '$longitude', '$accuracy', '$species', '$deadinjured', '$sex', '$age', '$name', '$contact_info', '$notes', 'source 1');";
$sql .= "INSERT INTO child (date, time, latitude, longitude, accuracy, species, deadinjured, sex, age, name, contact_info, notes)
VALUES ('$date', '$time', '$latitude', '$longitude', '$accuracy', '$species', '$deadinjured', '$sex', '$age', '$name', '$contact_info', '$notes');";
'Когда я создаю новую запись, обе таблицы заполняются правильно'. Можем ли мы увидеть точные запросы/запросы, которые вы выполняете? – Nate
Вперед - я отредактирую их в свой первоначальный вопрос. – skwidbreth
Вы должны явно указать родительский идентификатор в команде 'INSERT', которая вставляет в дочернюю таблицу. Вы можете получить идентификатор родительской записи сразу после ее добавления с помощью соответствующей функции API: например. ['mysql_insert_id()'] (https://secure.php.net/manual/en/function.mysql-insert-id.php), ['mysqli :: $ insert_id'] (https: //secure.php .net/manual/en/mysqli.insert-id.php), ['PDO :: lastInsertId'] (https://secure.php.net/manual/en/pdo.lastinsertid.php) и т. д. – eggyal