0

親と子の2つのテーブルがあります。子列の 1 つは、FOREIGN KEY 制約を持つ親の PRIMARY KEY を参照しています - child.parent_id は、parent.parent_id を参照しています。

子テーブルの外部キー列は NULL 値を許可します。これは、子が作成されるときに親がまだ不明な場合があるためです。しかし、親に関する情報が割り当て/更新されると、参照整合性が必要になります。

そして今、質問:

HTMLフォームからMySQLにnull値を渡す方法は? 引用符 '' または "" が機能しない 「外部キー制約が失敗します」 おそらく null 値の代わりに空の文字列を渡すためです。それとも、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`);
4

2 に答える 2

0

空の値を null に変換するか、PHP でクエリを編集する必要があります。

于 2013-06-21T09:31:42.470 に答える
0

テーブルが親の値をNULLサポートしていないのに、なぜ値を渡したいのでしょうか? NULLまた

`parent_id` int(11) DEFAULT NULL,

NOT NULLとして常に親を持つ必要があります。

親/子識別子を HTML フォームから渡そうとする場合は、PHPコードでサーバー側で検証することをお勧めします。マークアップの値を簡単に操作して、必要な親/子の組み合わせを追加できるためです。

于 2013-06-21T09:31:58.273 に答える