我正在尝试创建一个存储过程来将数据插入到我的连接表中,该表包含两个外键(一个用于成员,一个用于中心)
使用直接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)
答案 0 :(得分: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