mysql insert 후 select 실패 0 1 1,002

by leest8844 [MySQL] mysql procedure [2021.10.15 14:31:19]


고수님들 mysql 초보입니다. 

로그인 후 로그인한 정보 조회할 경우 조회가 되지 않습니다. - sleep 1 초정도 주면 조회됨

구조는 login - token 발행 - token으로 정보 사용자 정보 조회

각각 프로시저로 구성되어있습니다.

token table에 insert 프로시저 
----------------------------------------------------------------------------------
START TRANSACTION;

INSERT  INTO tm_playerapi	(player_fk,	token,		cid,			secret,				error,      regdate,			delete_flag)
    VALUES						(@nPK,		i_szToken,	szClient_ID,	szClient_Secret,    nError,		UTC_TIMESTAMP(),    nDelete_Flag);
    SET	@nPK_New	    =	LAST_INSERT_ID();
    IF	(ISNULL(@nPK_New)	OR @nPK_New	= 0	OR	@nPK_New = @nPK_Old)    THEN
        SET     o_nRetCode  =   -111100;
        SET     o_szRetMSG  =   "INSERT tm_playerapi Fail";
        ROLLBACK;
        LEAVE   Proc_Main;
    END IF;
    COMMIT;

-----------------------------------------------------------------------------------------------------------

token insert 후 프로시저 종료 

php 에서 로그인하면 token 발행 진행되고 바로 홈화면에서 사용자 정보 조회하는데 등록되지 않은 token이라고 나옴

-----------------------------------------------------------------------------------------------------------

	IN          i_szToken           VARCHAR (500),

	OUT         o_szPlayer_ID       VARCHAR (40)
)
BEGIN
    DECLARE     szPlayer_ID         VARCHAR (40)        DEFAULT NULL;
    SET	@dtUTCNow	=	UTC_TIMESTAMP();

    SELECT      PL.player_id
    INTO        szPlayer_ID
    FROM        tm_player       AS  PL
    INNER JOIN  tm_playerapi    AS  PA  ON  PA.player_fk    =   PL.player_pk
    WHERE       PA.token        =   i_szToken
    AND         TIMESTAMPDIFF(second,   PA.regdate, @dtUTCNow)  >   0;

    SET         o_szPlayer_ID   =   szPlayer_ID;

-----------------------------------------------------------------------------------------------------------

token으로 사용자 id 알아오는 프로시저 여기서 null 로 나오고 다시 동일한 token으로 진행하면 정상 진행 됨...

 

도와주십쇼

by leest8844 [2021.10.15 18:35:55]

해결했습니다.

동시간대에 프로시저가 동작하다보니 

TIMESTAMPDIFF() 로 확인하는데 second로 하다보니 등록일과 현재시간이 같아 select 실패하였습니다.

AND         TIMESTAMPDIFF(second,   PA.regdate, @dtUTCNow)  >=   0;

또는         AND         TIMESTAMPDIFF(MICROSECOND,   PA.regdate, @dtUTCNow)  >   0; 

 수정 하였습니다.

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입