手动插入子表时如何解决外键约束失败错误?

时间:2015-06-23 08:48:32

标签: php mysql database mysqli

我使用MySQLi连接到我的数据库,我的问题是我想在数据库中插入但是我收到此错误:

  

错误:无法添加或更新子行:外键约束   失败(edi_tracker_revisededi_transaction,CONSTRAINT   edi_transaction_ibfk_1 FOREIGN KEY(edi_doc_type_id)参考   edi_doc_typeedi_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。有人可以帮帮我吗?

2 个答案:

答案 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;

但这不是好习惯。