我正在调用一个存储过程,用于使用PHP页面向数据库中插入一些细节。只有在表中没有类似的数据条目时才应输入数据。我试图通过一起发出100个请求(使用测试工具)来测试它。但执行后存在相同行的4倍。
这是我正在使用的存储过程:
DELIMITER $$
USE `mydb`$$
DROP PROCEDURE IF EXISTS `AddCreditCard`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `AddCreditCard`(IN scardname VARCHAR(200),scardnumber VARCHAR(200),scardedate VARCHAR(200),scardcvv VARCHAR(200),scountry VARCHAR(200),sdeviceid TEXT,scard_type VARCHAR(200),OUT rflag INT)
BEGIN
DECLARE user_id INT DEFAULT -1;
DECLARE card_count INT DEFAULT -1;
START TRANSACTION;
SET rflag=0;
SELECT udd_user_id_fk INTO user_id FROM user_device_details WHERE udd_device_id=sdeviceid;
IF user_id<>0 THEN
SELECT COUNT(uccd_entry_id) INTO card_count FROM user_credit_card_details WHERE uccd_card_number=scardnumber AND uccd_user_id_fk=user_id;
IF card_count=0 THEN
INSERT INTO user_credit_card_details(uccd_user_id_fk,uccd_card_name,uccd_card_number,uccd_card_expiry_date,uccd_card_cvv,uccd_country,uccd_card_type)VALUES(user_id,scardname,scardnumber,scardedate,scardcvv,scountry,scard_type);
SET rflag=1;
ELSE
SET rflag=414;
END IF;
ELSE
SET rflag=0;
END IF;
COMMIT;
END$$
DELIMITER ;
我期待的结果是,首先它应该返回'1'并且对于之后的所有请求它应该返回'414'。请建议我解决这个问题。
答案 0 :(得分:0)
如果您在IF
之后和THEN
之前有多行,则需要将它们括在BEGIN...END
块中。