15

我正在尝试将值插入到我的评论表中,但出现错误。它说我不能添加或更新子行,我不知道这意味着什么。我的架构看起来像这样:

--
-- Baza danych: `koxu1996_test`
--

-- --------------------------------------------------------

--
-- Struktura tabeli dla tabeli `user`
--

CREATE TABLE IF NOT EXISTS `user` (
  `id` int(8) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) COLLATE utf8_bin NOT NULL,
  `password` varchar(64) COLLATE utf8_bin NOT NULL,
  `password_real` char(32) COLLATE utf8_bin NOT NULL,
  `email` varchar(32) COLLATE utf8_bin NOT NULL,
  `code` char(8) COLLATE utf8_bin NOT NULL,
  `activated` enum('0','1') COLLATE utf8_bin NOT NULL DEFAULT '0',
  `activation_key` char(32) COLLATE utf8_bin NOT NULL,
  `reset_key` varchar(32) COLLATE utf8_bin NOT NULL,
  `name` varchar(32) COLLATE utf8_bin NOT NULL,
  `street` varchar(32) COLLATE utf8_bin NOT NULL,
  `house_number` varchar(32) COLLATE utf8_bin NOT NULL,
  `apartment_number` varchar(32) COLLATE utf8_bin NOT NULL,
  `city` varchar(32) COLLATE utf8_bin NOT NULL,
  `zip_code` varchar(32) COLLATE utf8_bin NOT NULL,
  `phone_number` varchar(16) COLLATE utf8_bin NOT NULL,
  `country` int(8) NOT NULL,
  `province` int(8) NOT NULL,
  `pesel` varchar(32) COLLATE utf8_bin NOT NULL,
  `register_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `authorised_time` datetime NOT NULL,
  `edit_time` datetime NOT NULL,
  `saldo` decimal(9,2) NOT NULL,
  `referer_id` int(8) NOT NULL,
  `level` int(8) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `country` (`country`),
  KEY `province` (`province`),
  KEY `referer_id` (`referer_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=83 ;

我试图做的mysql语句看起来像这样:

INSERT INTO `user` (`password`, `code`, `activation_key`, `reset_key`, `register_time`,                `edit_time`, `saldo`, `referer_id`, `level`) VALUES (:yp0, :yp1, :yp2, :yp3, NOW(), NOW(), :yp4, :yp5, :yp6). Bound with :yp0='fa1269ea0d8c8723b5734305e48f7d46', :yp1='F154', :yp2='adc53c85bb2982e4b719470d3c247973', :yp3='', :yp4='0', :yp5=0, :yp6=1

我得到的错误如下所示:

SQLSTATE[23000]:完整性约束违规:1452 无法添加或更新子行:外键约束失败(koxu1996_test. user, CONSTRAINT user_ibfk_1FOREIGN KEY ( country) REFERENCES country_type( id) ON DELETE NO ACTION ON UPDATE NO ACTION)

4

8 回答 8

28

它只是意味着您插入的表注释上的列 country 的值在表country_type上不存在,或者您没有在表user上插入 country 的值。请记住,表 comments 上列 country 的值取决于表country_type上 ID 的值。

于 2013-07-15T06:59:30.560 回答
6

您在此表和另一个表之间有外键,并且该新行将违反该约束。

如果您运行,您应该能够看到约束show create table user,它显示为CONSTRAINT...并显示哪些列引用了哪些表/列。

在这种情况下country引用country_type (id)并且您没有指定country. 您需要输入一个存在于country_type.

于 2013-07-15T07:02:25.487 回答
2

只是为了解决我自己的问题,以防它可以帮助其他人,我在我的迁移文件中复制/粘贴条目,并通过在整数周围加上引号而搞砸了。由于我试图输入的值被认为是进入引用另一个整数的整数字段的字符串,因此出现了此错误。

于 2016-06-09T17:02:28.077 回答
1

另一种选择可能是源表中的主键不是无符号的,所以我用(注意idint(8) 无符号)解决了相同的插入问题:

如果不存在则创建表useridint(8) unsigned NOT NULL AUTO_INCREMENT, usernamevarchar(32) COLLATE utf8_bin NOT NULL,
passwordvarchar(64) COLLATE utf8_bin NOT NULL, password_real char(32) COLLATE utf8_bin NOT NULL, emailvarchar(32) COLLATE utf8_bin NOT NULL , codechar(8) COLLATE utf8_bin NOT NULL,
activatedenum('0','1') COLLATE utf8_bin NOT NULL DEFAULT '0',
activation_keychar(32) COLLATE utf8_bin NOT NULL, reset_key varchar(32) COLLATE utf8_bin NOT NULL, namevarchar(32 ) COLLATE utf8_bin NOT NULL, streetvarchar(32) COLLATE utf8_bin NOT NULL,
house_numbervarchar(32) COLLATE utf8_bin NOT NULL,
apartment_numbervarchar(32) COLLATE utf8_bin NOT NULL, city varchar(32) COLLATE utf8_bin NOT NULL, zip_codevarchar(32) COLLATE utf8_bin NOT NULL, phone_numbervarchar(16) COLLATE utf8_bin NOT NULL, countryint(8) NOT NULL, provinceint(8) NOT NULL, peselvarchar(32) COLLATE utf8_bin NOT NULL,
register_timetimestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
authorised_timedatetime NOT NULL , edit_timedatetime NOT NULL, saldodecimal(9,2) NOT NULL, referer_idint(8) NOT NULL,
levelint(8) NOT NULL, PRIMARY KEY ( id), KEY country ( country), KEY province( province), KEY referer_id ( referer_id) ) ENGINE=InnoDB DEFAULT CHARSET =utf8 整理=utf8_bin AUTO_INCREMENT=83 ;

于 2016-06-29T11:43:13.510 回答
1

在我的情况下,目标表列的值为空,而参考表列具有它。因此抛出了这个错误。

于 2016-08-01T04:22:55.847 回答
1

在我的情况下,参考值与相关表不对应。只需确保参考表中存在这些值,并且当前行具有相应的有效值。

于 2017-01-10T21:15:46.740 回答
1

在我的情况下,它在SQL命令中没有问题,但是输入没有作为 $request 发送,所以在 php.ini 文件中:

max_input_vars 默认为 1000,我将其更改为:

max_input_vars = 2000

然后你必须重新启动网络服务器。

于 2020-02-28T19:03:10.957 回答
0

您应该传递NULL空值。不是空字符串,例如''

于 2022-03-05T18:39:32.787 回答