> 백엔드 개발 > PHP 튜토리얼 > PHP_php에서 sleep을 사용하여 발생하는 mysql 읽기 실패 사례 및 해결 방법 팁

PHP_php에서 sleep을 사용하여 발생하는 mysql 읽기 실패 사례 및 해결 방법 팁

WBOY
풀어 주다: 2016-05-16 20:37:38
원래의
1106명이 탐색했습니다.

최근 프로젝트 필요로 인해
특정 작업을 수행하려면 데이터베이스에서 정기적으로 많은 데이터를 가져오려면 절전 기능을 사용해야 합니다.
수면 대기 시간은 최소 1시간입니다
이전에 테스트
몇 시간 후에 수행된 작업을 완료하기 위해 절전 기능을 사용할 수 있습니다

하지만 여기서 사악한 문제가 발생합니다
sleep을 사용한 후 프로그램은 데이터베이스에서 해당 정보를 가져올 수 없음을 발견했습니다
수면 제거
결과는 정상입니다

우울한. . .
수면이 도서관 독서 작업에 영향을 미치나요? ! !
그래서 테스트의 편의를 위해
그냥 sleep(10) 하고 10초 안에 실행하세요
결과는 데이터베이스에서 정보를 읽을 수 있습니다

그런데 왜 sleep()은 한 시간 후에 정보를 읽을 수 없습니까?
테스트의 편의를 위해 sleep문 바로 직전에 라이브러리를 읽고, sleep문 다음에 다시 라이브러리를 읽습니다
예:

코드 복사 코드는 다음과 같습니다.

require_once('include.php');
//데이터베이스 정보 읽기
$data = $db->getList();
print_r($data);

// 한 시간 후에 예약
수면(3600);

// 정보를 다시 읽어보세요
$data = $db->getList();
print_r($data);

?>


처음으로 데이터베이스 읽기에 성공했습니다
두 번째 읽기 라이브러리가 비어 있습니다

그래서 잠을 10초로 변경하고 다시 테스트해봤습니다
코드 복사 코드는 다음과 같습니다.

require_once('include.php');
//데이터베이스 정보 읽기
$data = $db->getList();
print_r($data);

// 10초 후 타이머
수면(10);

// 정보를 다시 읽어보세요
$data = $db->getList();
print_r($data);

?>

위의 결과
데이터베이스를 두 번 성공적으로 읽었습니다.

1시간 후에 데이터베이스 읽기가 실패하지만 10초 후에 데이터베이스 읽기에 성공하는 이유는 무엇입니까? ?
싱글톤 데이터베이스 작업 클래스를 사용합니다
질문이 떠오릅니다
데이터베이스 연결 시간이 초과되어 데이터베이스 읽기가 실패했을 수 있습니까?
그래서 여기서 데이터베이스 읽기 동작을 실시간 연결로 빠르게 변경했습니다
코드 복사 코드는 다음과 같습니다.

require_once('include.php');
//데이터베이스 정보 읽기
$data = getList();
print_r($data);

// 한 시간 후에 예약
수면(3600);

// 정보를 다시 읽어보세요
$data = getList();
print_r($data);

//데이터베이스 정보 읽기
함수 getList(){
           $pdo = 새 PDO('mysql:host=localhost;dbname=test','root','root');
          $result = $pdo->query('테이블에서 * 선택');
          return $result->fetchAll(PDO::FETCH_ASSOC);
}
?>

테스트 성공! !
sleep으로 인해 싱글톤 클래스가 시간 초과되고, 실행 시간이 너무 길어지면 데이터베이스 연결이 끊어지고 데이터베이스 정보를 읽을 수 없는 것으로 나타났습니다!
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿