Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 错误:无法添加或更新子行:外键约束失败?_Php_Mysql_Phpmyadmin - Fatal编程技术网

Php 错误:无法添加或更新子行:外键约束失败?

Php 错误:无法添加或更新子行:外键约束失败?,php,mysql,phpmyadmin,Php,Mysql,Phpmyadmin,错误:无法添加或更新子行:外键约束 失败? (testloginleavetable,约束leavetable\u ibfk\u 1外键 (users\u id)参考users(id)删除级联更新级联) 在过去的一天半里我一直收到这个消息。尝试在两个表之间建立一对多(外键)关系。在users:id和leavetable:users\u id之间。当用户登录时,他们会得到一个id。当他们向列hours提交表单时,我希望id与表单数据保持一致。当有人创建一个新的id号时,它会抛出错误,并且不会更新l

错误:无法添加或更新子行:外键约束 失败? (
testlogin
leavetable
,约束
leavetable\u ibfk\u 1
外键
users\u id
)参考
users
id
)删除级联更新级联)

在过去的一天半里我一直收到这个消息。尝试在两个表之间建立一对多(外键)关系。在
users:id
leavetable:users\u id
之间。当用户登录时,他们会得到一个id。当他们向列
hours
提交表单时,我希望id与表单数据保持一致。当有人创建一个新的id号时,它会抛出错误,并且不会更新
leavetable:user\u id
。它抛出上面的错误

这是我的密码:

CREATE TABLE IF NOT EXISTS `users` ( 
`email` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, 
`id` int(11) NOT NULL, 
`password` char(64) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, 
`salt` char(16) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, 
`username` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 



CREATE TABLE IF NOT EXISTS `leavetable` ( 
`hours` int(11) NOT NULL, 
`users_id` int(11) DEFAULT NOT NULL, 
`id` int(11) NOT NULL 
 ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 


 ALTER TABLE `users` 
 ADD PRIMARY KEY (`id`) USING BTREE, 
 ADD UNIQUE KEY `email` (`email`) USING BTREE, 
 ADD UNIQUE KEY `username` (`username`) USING BTREE; 

 ALTER TABLE `leavetable` 
 ADD PRIMARY KEY (`id`) USING BTREE, 
 ADD KEY `users_id` (`users_id`) USING BTREE; 

 ALTER TABLE `leavetable` 
 MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; 
 -- AUTO_INCREMENT for table `users` 
 ALTER TABLE `users` 
 MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; 

ALTER TABLE `leavetable` 
ADD CONSTRAINT `leavetable_ibfk_1` FOREIGN KEY (`users_id`) REFERENCES
`users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
我的表格结构:

+---------------------+
| Tables_in_testlogin |
+---------------------+
| leavetable          |
| users               |
+---------------------+

+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| email    | varchar(255) | NO   | UNI | NULL    |                |
| id       | int(11)      | NO   | PRI | NULL    | auto_increment |
| password | char(64)     | NO   |     | NULL    |                |
| salt     | char(16)     | NO   |     | NULL    |                |
| username | varchar(255) | NO   | UNI | NULL    |                |
+----------+--------------+------+-----+---------+----------------+
5 rows in set (0.01 sec)

+----------+---------+------+-----+---------+----------------+
| Field    | Type    | Null | Key | Default | Extra          |
+----------+---------+------+-----+---------+----------------+
| hours    | int(11) | NO   |     | NULL    |                |
| users_id | int(11) | NO   | MUL | NULL    |                |
| id       | int(11) | NO   | PRI | NULL    | auto_increment |
+----------+---------+------+-----+---------+----------------+
3 rows in set (0.01 sec)

首先必须清除子表的数据,然后清除主表之间的外键,然后可以清除任何数据

,如果数据在更新stmt或插入上,并且FK已就位,则该操作违反FK约束
leavetable.user\u id
不存在于
users
中,我如何在注册新用户时更新它。我刚刚改变了一下。它被命名为
leavetable.id
,但这无关紧要。您能否仅向我们展示这两个表的最终结果,使用
show create table users
show create table leavetable
autoincrement
上插入新用户。获取最后一个插入id,并将其与对
leavetable
的引用一起使用。。。php会话变量的使用是一个值得思考的想法TPDO应该是,mysqli应该是