PHP 개발을 수행 할 때, 특히 하나의 응용 프로그램에서 여러 데이터베이스 연결을 처리 할 때 데이터베이스 작업 디버깅이 복잡해질 수 있습니다. PHP의 MySQLI :: Debug 메소드는 덜 언급되지 않았지만 매우 유용한 디버깅 도구입니다. 특히 데이터베이스 연결 분석, 명세서 실행 및 기본 네트워크 활동보기에도 적합합니다.
이 기사는 여러 데이터베이스 연결을 디버깅 할 때 MySQLI :: Debug 메소드를 효과적으로 사용하는 방법을 자세히 소개하고 샘플 코드와 함께 설명합니다.
mysqli :: debug () 는 MySQLI Extension에 제공된 정적 메소드이며, 디버깅 정보를 MySQL 클라이언트 라이브러리로 보내는 데 주로 개발 및 디버깅 프로세스에 사용됩니다. 이 기능은 아무것도 반환하지 않으며 주요 기능은 디버그 정보를 클라이언트 라이브러리에서 구성한 디버그 파일에 쓰는 것입니다.
작동하려면 Debug 지원이 my.cnf 또는 my.ini 에서 활성화되어야합니다 (일반적으로 Debug = D : T : O,/TMP/Client.Trace 를 통해 클라이언트 섹션에서 구성)를 사용 하여이 메소드를 사용하여 로깅을 트리거하십시오.
mysqli::debug("d:t:o,/tmp/client.trace");
디버그 정보를 /tmp/client.thrace 에 작성합니다.
여러 데이터베이스가 기본 데이터베이스 및 다중 읽기 복제본과 같은 응용 프로그램에 연결되면 디버깅을 더 타겟팅해야합니다. 권장 전략은 다음과 같습니다.
데이터베이스 연결 프로세스를 캡슐화하고 각 연결에 식별 이름을 추가하고 출력 로그에서 소스를 구별 할 수 있습니다.
function connect_to_db($label, $host, $user, $pass, $db) {
mysqli::debug("d:t:o,/tmp/{$label}_trace.log"); // 각 연결에 대한 디버그 파일을 설정하십시오
$conn = new mysqli($host, $user, $pass, $db);
if ($conn->connect_error) {
die("연결이 실패했습니다 ({$label}): " . $conn->connect_error);
}
return $conn;
}
$main_db = connect_to_db("main", "localhost", "root", "password", "main_db");
$replica_db = connect_to_db("replica", "localhost", "root", "password", "replica_db");
MySQLI :: Debug 는 기본 디버깅 정보이지만 PHP의 로그 출력과 완전히 디버깅 링크를 형성 할 수 있습니다.
mysqli::debug("d:t:o,/tmp/replica_trace.log");
$replica_conn = new mysqli("localhost", "user", "pass", "replica_db");
if ($replica_conn->connect_error) {
error_log("복제 데이터베이스에 연결하지 못했습니다: " . $replica_conn->connect_error);
} else {
error_log("Replica 데이터베이스에 성공적으로 연결합니다: " . $replica_conn->host_info);
}
http://m66.net/log-viewer 와 같이 사용하여 문제를 신속하게 찾을 수있는 로그보기 인터페이스를 작성할 수 있습니다.
개발 또는 테스트 환경에서는 매번 MySQLI :: Debug를 수동으로 호출하지 않을 수 있습니다. 현재 환경 변수 또는 구성 파일을 사용하여 디버깅 활성화 여부를 제어 할 수 있습니다.
if (getenv("DB_DEBUG") === "true") {
mysqli::debug("d:t:o,/tmp/debug_trace.log");
}
.env 파일을 추가하십시오.
DB_DEBUG=true
mysqli_report ()를 결합하면 오류를 더 잘 잡을 수 있습니다.
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
mysqli::debug("d:t:o,/tmp/debug_trace.log");
$conn = new mysqli("localhost", "user", "pass", "some_db");
이렇게하면 조용한 실패 대신 예외가 발생하여 코드 수준에서 문제를 쉽게 추적 할 수 있습니다.