2017-08-14 75 views
0

我想创建一个存储过程,将数据插入我的其中包含两个外键(一个为会员和一个用于中心)存储过程和外键检查

有了直接的SQL(通过phpMyAdmin的)加入表我可以更改表中的值,但是使用存储过程我只会收到错误:1452.

如何在不导致错误并且不完全禁用外键约束的情况下写入表。我明白没有什么可以防止人们输入错误的数值,这个想法是用户界面最终会阻止这种情况。但是,如果数据库中有更好的方法,我很乐意听到它。

的作品的SQL是:

INSERT INTO `tblmembers_has_tblcentres` (`tblMembers_MemberID`, 
`tblCentres_CentreID`, `DateMemberJoinedCentre`) VALUES ('92', '2', 
CURRENT_TIMESTAMP); 

我的存储过程是这样的:

CREATE DEFINER=`root`@`localhost` PROCEDURE `Add_Memb_to_Centre`(IN `iMember` 
INT, IN `iCentre` INT) 
    SQL SECURITY INVOKER 
INSERT INTO `tblmembers_has_tblcentres` (`tblMembers_MemberID`, 
`tblCentres_CentreID`, `DateMemberJoinedCentre`) VALUES ('iMember', 'iCentre', 
CURRENT_TIMESTAMP) 

回答

1

您正在尝试插入字符串值"iMember""iCentre",而不是他们的变量内容。继续使用反引号:

CREATE DEFINER=`root`@`localhost` PROCEDURE `Add_Memb_to_Centre`(IN `iMember` 
INT, IN `iCentre` INT) 
    SQL SECURITY INVOKER 
INSERT INTO 
    `tblmembers_has_tblcentres` 
    (
     `tblMembers_MemberID`, 
     `tblCentres_CentreID`, 
     `DateMemberJoinedCentre` 
    ) 
    VALUES ('iMember', 'iCentre', CURRENT_TIMESTAMP) -- WRONG 
    VALUES (`iMember`, `iCentre`, CURRENT_TIMESTAMP) -- CORRECT