我使用MySQLi连接到我的数据库,我的问题是我想在数据库中插入但是我收到此错误:
错误:无法添加或更新子行:外键约束 失败(
edi_tracker_revised
。edi_transaction
,CONSTRAINTedi_transaction_ibfk_1
FOREIGN KEY(edi_doc_type_id
)参考edi_doc_type
(edi_doc_type_id
)ON DELETE CASCADE ON UPDATE CASCADE)
这是我的插入代码。
if ($doc_type == '812') {
$edi_doc_type_id = "SELECT edi_doc_type_id FROM `edi_doc_type` WHERE doc_type = 812 " ;
$sql = "INSERT INTO edi_transaction (`sender_id`,`receiver_id`,`isa_number`,`transaction_date`,`gs_number`,`edi_doc_type_id`,`ref_number`,`file_name`,`file_path`,`creation_date`)
VALUES ('$sender_id','$receiver_id','$isa_number','$transaction_date','$gs_number','$edi_doc_type_id','$ref_number','$file_name','$file_path',NOW()) " ;
$ref_numberArray = explode(',' ,$ref_number); // the ref_number contains the invoice numbers
//Checking query if it is successful
if ($conn->query($sql) === false){
trigger_error('Wrong SQL: ' . $sql . 'Error: ' . $conn->error , E_USER_ERROR);
}else {
echo "Successful ! Data is inserted in database ^__^" ;
}
}
当我手动说,我使用phpmyadmin插入,现在如果我在edi_transaction之前手动填充我的edi_doc_type,我该如何解决?我需要edi_transaction表中的edi_doc_type_id。有人可以帮帮我吗?
答案 0 :(得分:0)
$edi_doc_type_id = "SELECT edi_doc_type_id FROM `edi_doc_type` WHERE doc_type = 812 " ;
没有执行查询,它只是一个字符串赋值。由于SELECT edi_doc_type_id FROM `edi_doc_type` WHERE doc_type = 812
不是有效ID,因此第二个查询失败。
在第二个查询中使用它之前,你应该执行SELECT查询并读出edi_doc_type_id。
还有必要查看预准备语句或转义值以防止SQL注入攻击。
答案 1 :(得分:0)
即使您试图绕过它们,外键有什么好处 -
此外,如果您需要,那么您可以按照以下方式使用 -
set foreign_key_checks=0;
insert....
set foreign_key_checks=1;
但这不是好习惯。