get_uniqid 생성시 오류 질문입니다~

get_uniqid 생성시 오류 질문입니다~

QA

get_uniqid 생성시 오류 질문입니다~

본문


function get_uniqid()
{
    global $g5;
    sql_query(" LOCK TABLE {$g5['uniqid_table']} WRITE ");
    while (1) {
        // 년월일시분초에 100분의 1초 두자리를 추가함 (1/100 초 앞에 자리가 모자르면 0으로 채움)
        $key = date('YmdHis', time()) . str_pad((int)((float)microtime()*100), 2, "0", STR_PAD_LEFT);
        $result = sql_query(" insert into {$g5['uniqid_table']} set uq_id = '$key', uq_ip = '{$_SERVER['REMOTE_ADDR']}' ", false);
        if ($result) break; // 쿼리가 정상이면 빠진다.
        // insert 하지 못했으면 일정시간 쉰다음 다시 유일키를 만든다.
        usleep(10000); // 100분의 1초를 쉰다
    }
    sql_query(" UNLOCK TABLES ");
    return $key;
}

유일키 생성하는 함수를 특정 페이지에 넣고 새로고침을 막하다보면

Cannot execute statement in a READ ONLY transaction.[1792]

이렇게 오류가 뜨는데요 이런건 어떻게 처리를 하는건지 알수있을가요?

서버가 이상한건가 흠

 

추가내용


// 특정 페이지 아래처럼 함수 넣고
$orderCode=  get_uniqid();
// 값출력 테스트
echo $orderCode; 

 

위처럼 실행하면 잘되다 10에 1번은 

멈추는 먹통? 현상이 발생해서

함수 부분에

sql_query  부분 오류 디버깅 버분 true 설정 하니 에러출력.

Cannot execute statement in a READ ONLY transaction.[1792]

에러후 새로고침 하면 다시 되길래.. 소스를

 


if ($result) break; // 쿼리가 정상이면 빠진다.
이부분을 아래처럼 변경;;
if ($result){
    break; // 쿼리가 정상이면 빠진다.
}else{
    // 오류 나도 함수 다시 실행하게.... 
    get_uniqid()
} 

 

위처럼 수정해서 하긴 했는데 위 처럼 수정해도 문제가 안될가요? 흠 ~

혹 조언좀 해주실분 계신가요~ 

이 질문에 댓글 쓰기 :

답변 1

sql_query(" LOCK TABLE {$g5['uniqid_table']} WRITE ");
...
sql_query(" UNLOCK TABLES ");
...

// 이렇게 table lock을 걸면 생기는 현상입니다.

Cannot execute statement in a READ ONLY transaction.[1792]

MySQL의 timeout이 길면 더 자주 발생할 수 있습니다.

https://kimdubi.github.io/mysql/timeout/

답변을 작성하시기 전에 로그인 해주세요.
전체 56
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT