错误号码:1452
无法添加或更新子行:外键约束失败(smp
student
,约束FK\u ParentStudent
外键(p\u id
)引用parent
(p\u id
)在更新级联时删除级联)
INSERT INTO学生
(s_id
,student_code
,f_name
,l_name
,dob
,性别
,地址
,电话
,用户名
,
密码
)值 ('', 'cbg','sdfsdf','sdfsd','02/13/2019','男性','fgfhnf', '', 'admin','pAQ7oL r8QJNgy2siN5moyJUhrgSj5tq3Ai5U2ngMyvaQZDsS9ooPbfccm8qKEWi1C6nbYdMCyscz6ngU 1Tiw==')
文件名:C:/xampp/htdocs/SMP/system/database/DB\u驱动程序。php
电话号码:691
我得到这个错误,我认为这与我在控制器中的函数有关
public function register_students() {
// $this->load->model('Register_model','multi_model',TRUE);
$encrypted_password1 = $this->encrypt->encode($this->input->post('p_pwd'));
$parent_data = array(
'p_id' => '',
'parent_code' => $this->input->post('parent_code'),
'f_name' => $this->input->post('p_first_name'),
'l_name' => $this->input->post('p_last_name'),
'dob' => $this->input->post('p_dob'),
'address' => $this->input->post('p_address'),
'tel' => $this->input->post('p_tel_no'),
'email' => $this->input->post('email'),
'username' => $this->input->post('p_username'),
'password' => $encrypted_password1,
);
// var_dump($student_data);
// var_dump($parent_data);
$result = $this->Model_Action->insertTable('parent', $parent_data);
$encrypted_password = $this->encrypt->encode($this->input->post('pwd'));
$student_data = array(
's_id' => '',
'student_code' => $this->input->post('student_code'),
'f_name' => $this->input->post('first_name'),
'l_name' => $this->input->post('last_name'),
'dob' => $this->input->post('dob'),
'gender' => $this->input->post('gender'),
'address' => $this->input->post('address'),
'tel' => $this->input->post('tel_no'),
'username' => $this->input->post('username'),
'password' => $encrypted_password,
);
$result = $this->Model_Action->insertTable('student', $student_data);
// $result = $this->multi_model->student_register($student_data, $parent_data);
if($result) {
redirect('student');
}
else
{
redirect('student');
}
}
模型
function insertTable($table, $data) {
$this->db->insert($table, $data);
return $this->db->insert_id();
}
创建表
student
(s_id
int(11)非空自动递增,student_code
varchar(50)非空,f_name
varchar(150)非空,l_name
varchar(250)非空,DOB
文本非空,gender
enum('male')、enum')非空,
varchar非空,
tel
int(50)非空,username
varchar(100)非空,password
varchar(150)非空,p\u id
int(11)非空,主键(s\u id
),键s\u id
(s\u id
),键p\u id
),键,键
(
p\u id
)在更新级联时删除级联时引用父级(p\u id
)引擎=InnoDB自动增量=16默认字符集=1
创建表
varchar(250)非空,parent
(p\u id
int(11)非空自动增量,parent\u code
varchar(100)非空,f\u name
varchar(150)非空,l\u name
varchar(250)非空,DOB
文本非空,address
addresstel
varchar(50)不为空,email
varchar(250)不为空,username
varchar(250)不为空,password
varchar(250)不为空,主键(p_id
),键p_id
)引擎=InnoDB AUTO_INCREMENT=10默认字符集=1
通过分析PHP代码,我发现您首先插入父对象,用于插入的函数返回一个父对象id,但您没有在student insert中使用它。如果将其添加到学生数组中,将解决您的问题:
public function register_students() {
{...}
$p_id = $this->Model_Action->insertTable('parent', $parent_data); // Parent it returned
$encrypted_password = $this->encrypt->encode($this->input->post('pwd'));
$student_data = array(
's_id' => '',
'p_id' => $p_id, // Adding parent id to student_data
{...}
);
$result = $this->Model_Action->insertTable('student', $student_data);
{...}
}
关于SQL错误的解释
您会得到这个SQL异常错误,因为在学生
表中,您定义了一个非空外键p_id
引用父表上的p_id
:
CREATE TABLE student (
s_id int(11) NOT NULL AUTO_INCREMENT,
student_code varchar(50) NOT NULL,
f_name varchar(150) NOT NULL,
l_name varchar(250) NOT NULL,
DOB text NOT NULL, gender enum('male','female') NOT NULL,
address varchar(450) NOT NULL,
tel int(50) NOT NULL,
username varchar(100) NOT NULL,
password varchar(150) NOT NULL,
p_id int(11) NOT NULL,
PRIMARY KEY (s_id),
KEY s_id (s_id),
KEY p_id (p_id),
CONSTRAINT FK_ParentStudent FOREIGN KEY (p_id) REFERENCES parent (p_id) ON DELETE CASCADE ON UPDATE CASCADE
)ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=latin1
请注意,p_id int(11)notnull
使您无法向父表传递除有效id引用以外的任何内容。也就是说,您不能从父表传递
'
或null
或有效id以外的任何其他值。如果希望此外键具有默认值,请编辑SQL以在student
表中包含p_id
的默认值:
p_id int(11)默认为NULL
错误代码:1452。无法添加或更新子行:外键约束失败(.,约束外键()引用()) 我看过其他关于这个话题的帖子,但没有运气。我是不是在监督什么或者知道该怎么做?
问题内容: 我的数据库中有两个表: ; 。 有一个列引用了表的列。每当我试图做在上面的错误将显示和数据不会被保存。 问题答案: 听起来是在表之间您在数据库中具有外键约束。这意味着,在Course_id列中,您不能插入与外部表中的id不同的值。 上面的错误意味着当您发布数据时,外部字段为空或丢失。 查找内容:1.检查数据库中子表中的外部字段是否可以接受NULL。如果您具有带值的下拉列表,并且如果该字
问题内容: 当我执行以下SQL命令时: 我收到以下错误消息: 我的桌子: 我研究了许多类似的案例,但找不到任何解决方案。任何帮助,将不胜感激。 问题答案: 为什么您获得的是异常的原因是因为你将在表中的记录,其中的价值是不存在的表。与相同的值也未显示在表上。 表格取决于表格:和 。所以,要确保在表中插入记录时,该值与存在于父表已经:和 。 尝试执行此查询,并确定将其插入。 SQLFiddle演示 我
问题内容: 当我不想相互连接两个表时,我得到以下消息:#1452-无法添加或更新子行:外键约束失败....我想从facebook_users表格中连接oauth_uid2(主键)外键为oauth_uid2的错误列表。但是我总是得到这个信息。我已经清除了数据,但没有任何效果。在表users_facebook中,我还有1条记录。 1452-无法添加或更新子行:外键约束失败(。,在更新级联上删除级联时使
当我不想将两个表相互连接时,我收到消息:#1452 - 无法添加或更新子行:外键约束失败....我想使用外键oauth_uid2将oauth_uid2(主键)从facebook_users选项卡连接到错误选项卡。但我总是收到这个信息。我已经清除了我的数据,但没有任何效果。同样在表中users_facebook我有 1 条记录。 1452-无法添加或更新子行:外键约束失败(., CONSTRAINT
保存; 例外 调试:org.hibernate.engine.jdbc.spi.sqlExceptionHelper-无法执行语句[n/a]com.mysql.jdbc.exceptions.mysqlintegrityConstraintViolationException:无法添加或更新子行:外键约束失败(。,约束)外键()引用 警告:org.hibernate.engine.jdbc.spi