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이 길면 더 자주 발생할 수 있습니다.
답변을 작성하시기 전에 로그인 해주세요.