如何将空值从HTML表单传递给mysql db外键字段

时间:2013-06-21 09:26:00

标签: php mysql sql foreign-keys

我有两张桌子:父母和孩子。其中一个子列引用具有FOREIGN KEY约束的父PRIMARY KEY - child.parent_id引用parent.parent_id。

子表中的外键列允许NULL值,因为当创建子时,父级可能尚未知道。但是,当有关父级的信息将被分配/更新时,我希望具有参照完整性。

现在的问题是:

如何将空值从HTML表单传递给MySQL?引号''或“”不工作“外键约束失败”可能是因为它传递空字符串而不是空值。或者我可能需要在PHP中进行一些额外的检查并将其转换为null吗?

CREATE TABLE IF NOT EXISTS `parent` (
  `parent_id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `surname` varchar(20) NOT NULL,
  PRIMARY KEY (`parent_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `child` (
 `child_id` int(11) NOT NULL AUTO_INCREMENT,
 `child_name` varchar(20) NOT NULL,
 `parent_id` int(11) DEFAULT NULL,
 PRIMARY KEY (`child_id`),
 KEY `fk_parent_id` (`parent_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

ALTER TABLE `child`
  ADD CONSTRAINT `fk_parent_id` FOREIGN KEY (`parent_id`) REFERENCES `parent` (`parent_id`);

2 个答案:

答案 0 :(得分:0)

您需要将空值转换为null或在PHP中编辑查询。

答案 1 :(得分:0)

如果您的表格不支持父级中的NULL值,为什么要传递NULL值?还

`parent_id` int(11) DEFAULT NULL,

作为一个孩子应该NOT NULL应该始终有父母。

如果您尝试从HTML表单传递父/子标识符,我建议您在PHP代码中验证它们的服务器端。因为我可以轻松地操作标记中的值并添加我希望的任何父/子组合。