이 글에서는 PHP에서 PDO와의 연결을 닫는 방법을 소개합니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.
이전에는 mysql 연결 작업을 직접 작성할 때 일반적으로 mysql_close()를 사용하여 데이터베이스 연결을 닫았습니다. 그러나 현대 개발에서는 프레임워크를 일반적으로 사용하면 기본 캡슐화를 무시하게 되며 대부분의 프레임워크는 기본적으로 데이터베이스 작업에 PDO를 사용합니다. 그렇다면 PDO가 데이터 연결을 닫는 방법을 알고 계십니까?
연결을 닫으려면 개체를 삭제하여 해당 개체에 대한 나머지 참조가 모두 삭제되도록 해야 합니다. 개체 변수에 NULL 값을 할당할 수 있습니다. 이를 명시적으로 수행하지 않으면 PHP는 스크립트 끝에서 자동으로 연결을 닫습니다.
$pdo = new PDO('mysql:host=127.0.0.1;port=3306;dbname=blog_test', 'root', ''); $pdo = null;
공식 문서에는 PDO 개체에 NULL을 할당하면 된다는 것이 매우 명확하게 나와 있습니다. 하지만 일이 정말 그렇게 간단할까요?
이렇게 테스트해 보겠습니다. 일반적인 상황에서는 데이터베이스 연결을 연 후 바로 닫지 않고 몇 가지 작업을 수행해야 합니다.
$pdo = new PDO('mysql:host=127.0.0.1;port=3306;dbname=blog_test', 'root', ''); $stmt = $pdo->prepare('SELECT * FROM zyblog_test_user'); $stmt->execute(); $pdo = null; sleep(60);
위 코드를 실행한 후 데이터베이스에서 show full processlist를 사용하여 연결 프로세스를 확인합니다. 현재 연결은 즉시 닫히지 않지만 60초가 지나야 닫힙니다. 페이지 실행이 완료되었습니다. $pdo = null이 성공적으로 실행되지 않은 것 같습니다.
사실 이 상황은 공식문서에도 설명이 되어있지만 사람들이 별 관심을 두지 않을 수도 있어요. [객체에 대한 나머지 참조가 모두 삭제되도록 하려면 객체를 삭제해야 합니다.] 위 코드에서 $stmt 사전 컴파일된 SQL 문 함수는 $pdo 객체의 메서드를 호출하여 이들 사이에 참조 종속 관계를 생성합니다. 이 경우 $pdo = null을 직접 지정해도 효과가 없으므로 $stmt도 null에 할당해야 합니다.
$pdo = new PDO('mysql:host=127.0.0.1;port=3306;dbname=blog_test', 'root', ''); $stmt = $pdo->prepare('SELECT * FROM zyblog_test_user'); $stmt->execute(); $stmt = null; $pdo = null; sleep(60);
그렇다면 mysqli의 기본 확장 구성요소를 사용할 때, 즉 데이터베이스 연결을 끊기 위해 mysqli 객체에서 close()를 사용할 때 이런 문제가 발생할까요? 아니면 코드로 직접 테스트해 보세요. (mysql 확장은 오래되어 권장하지 않습니다. 데이터베이스 작업 클래스를 직접 캡슐화하거나 작은 데모를 작성하려면 mysqli를 사용하는 것이 좋습니다)
$conn = new mysqli('127.0.0.1', 'root', '', 'blog_test'); $result = $conn->query('SELECT * FROM zyblog_test_user'); $stmt = $conn->prepare("SELECT * FROM zyblog_test_user"); $stmt->execute(); $conn->close(); sleep(60);
위 코드를 실행한 후에는 연결 프로세스가 표시되지 않습니다. 아직 실행 중인 연결이 보이면 mysqli에서 close() 메서드를 호출하면 데이터베이스 연결을 즉시 닫을 수 있다는 의미입니다.
사실 오늘의 내용도 데이터베이스 연결에 관한 공식 문서의 노트에 있는 내용입니다. 오래전에 어떤 마스터가 이 문제를 발견하고 공유했지만, 대부분의 사람들은 이 문제를 전혀 모르고, PDO가 데이터베이스 연결을 끊을 수 있다는 것조차 모르는 사람들이 많습니다. 프레임워크는 우리에게 편리함을 제공하지만 많은 것을 너무 잘 캡슐화하여 많은 친구들이 기본 콘텐츠에 신경 쓰지 않습니다. 그러나 더 높은 수준으로 이동하면 이러한 기본 사항이 종종 방해가 됩니다.
테스트 코드:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202008/source/PHP%E4%B8%ADPDO%E5%85%B3%E9%97%AD%E8%BF%9E%E6%8E%A5%E7%9A%84%E9%97%AE%E9%A2%98.php
추천 학습: php 비디오 튜토리얼
위 내용은 PHP에서 PDO와의 연결을 닫는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!