0

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」を返すことです。この問題の解決策を教えてください。

4

1 に答える 1

0

IFの前後に複数の行がある場合は、それらをブロックTHENで囲む必要があります。BEGIN...END

于 2013-04-26T12:57:46.407 に答える