PHP 프로젝트를 개발할 때 데이터베이스 운영이 종종 오류가 발생하기 쉬운 경우가 많습니다. 문제를 신속하게 찾으려면 상세한 디버깅 정보는 필수 불가능합니다. PHP의 MySQLI Extension은 유용한 디버깅 기능, 특히 MySQLI :: 디버그 방법을 제공하여 개발자가 MySQL 디버깅 정보를 얻을 수 있도록 도와줍니다. 한편, Error_Log 함수는 파일, 시스템 로그 또는 이메일로 보내는 오류 로그를 작성하는 강력한 도구입니다. 이 두 가지를 결합하여 개발자는보다 포괄적이고 직관적 인 데이터베이스 디버그 로그 출력을 달성 할 수 있습니다.
MySQLI :: Debug는 MySQL 클래스의 MySQL 데이터베이스의 기본 디버깅 정보를 출력 할 수있는 메소드입니다. 이 방법을 사용하여 개발자는 실행 된 SQL 쿼리, 연결 정보 및 MySQL 서버의 상태를 볼 수 있습니다. 이것은 SQL 쿼리의 실행을 디버깅하는 데 매우 도움이됩니다.
mysqli :: debug를 사용하는 것은 매우 간단합니다. 올바른 장소에서 호출하면됩니다. 사용법의 간단한 예는 다음과 같습니다.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">"localhost"</span></span><span>, </span><span><span class="hljs-string">"username"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"database"</span></span><span>);
</span><span><span class="hljs-comment">// 디버그 모드를 켭니다</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">debug</span></span><span>(</span><span><span class="hljs-string">"d:t"</span></span><span>); </span><span><span class="hljs-comment">// 'd' 디버깅 정보를 나타냅니다,'t' 추적 정보를 나타냅니다</span></span><span>
</span><span><span class="hljs-comment">// 구현하다 SQL 질문</span></span><span>
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"SELECT * FROM users"</span></span><span>);
</span><span><span class="hljs-comment">// 检查질문结果</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span>) {
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-variable">$result</span></span><span>-></span><span><span class="hljs-title function_ invoke__">fetch_assoc</span></span><span>()) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"User: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'name'</span></span><span>] . </span><span><span class="hljs-string">"<br>"</span></span><span>;
}
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Query failed: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->error;
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>이 예에서 $ mysqli-> debug ( "d : t")는 디버그 정보 출력을 활성화합니다. 이 정보는 브라우저 또는 터미널에 직접 출력하여 개발자가 MySQL 쿼리의 실행 세부 사항을 이해하도록 도와줍니다.
Error_Log 는 PHP의 내장 기능으로 오류 메시지를 시스템 로그로 보내거나 파일을 지정하거나 관리자에게 우편으로 보내는 기능입니다. 이 기능은 매우 유용하여 개발자가 오류 정보를 기록하고 필요에 따라 로그를 저장할 위치를 지정하는 데 도움이 될 수 있습니다.
기본 error_log는 다음과 같이 사용됩니다.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 지정된 파일에 오류 정보를 기록합니다</span></span><span>
</span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-string">"Database query failed: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->error, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">"/path/to/your/logfile.log"</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>이 예에서는 Error_Log가 지정된 로그 파일에 오류 메시지를 추가합니다.
mysqli :: debug는 자세한 데이터베이스 디버깅 정보를 출력 할 수 있지만, 특히 프로덕션 환경에서 브라우저 에이 정보를 직접 출력하는 것이 항상 이상적이지는 않을 수 있습니다. 따라서 후속 분석을 위해 저장하기 위해이 정보를 로그 파일에 동시에 출력하는 것이 더 나은 방법입니다.
mysqli :: debug 및 error_log를 결합하여보다 유연한 디버그 출력을 달성 할 수 있습니다. 실질적인 예는 다음과 같습니다.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 디버그 출력을 로그 파일로 설정하십시오</span></span><span>
</span><span><span class="hljs-variable">$logFile</span></span><span> = </span><span><span class="hljs-string">'/path/to/your/logfile.log'</span></span><span>;
</span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">"localhost"</span></span><span>, </span><span><span class="hljs-string">"username"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"database"</span></span><span>);
</span><span><span class="hljs-comment">// 디버그 모드를 켭니다</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">debug</span></span><span>(</span><span><span class="hljs-string">"d:t"</span></span><span>);
</span><span><span class="hljs-comment">// 로그 파일에 디버그 정보를 기록하십시오</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>(); </span><span><span class="hljs-comment">// 출력 버퍼링을 켭니다</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">debug</span></span><span>(</span><span><span class="hljs-string">"d:t"</span></span><span>);
</span><span><span class="hljs-variable">$debugOutput</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ob_get_clean</span></span><span>();
</span><span><span class="hljs-comment">// 지정된 로그 파일에 대한 출력 디버그 정보</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-keyword">empty</span></span><span>(</span><span><span class="hljs-variable">$debugOutput</span></span><span>)) {
</span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-string">"MySQL Debug Output: "</span></span><span> . </span><span><span class="hljs-variable">$debugOutput</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-variable">$logFile</span></span><span>);
}
</span><span><span class="hljs-comment">// 구현하다 SQL 질문</span></span><span>
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"SELECT * FROM users"</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span>) {
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-variable">$result</span></span><span>-></span><span><span class="hljs-title function_ invoke__">fetch_assoc</span></span><span>()) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"User: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'name'</span></span><span>] . </span><span><span class="hljs-string">"<br>"</span></span><span>;
}
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-variable">$errorMsg</span></span><span> = </span><span><span class="hljs-string">"Query failed: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->error;
</span><span><span class="hljs-comment">// 기록 SQL 로그 파일에 오류 메시지</span></span><span>
</span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-variable">$errorMsg</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-variable">$logFile</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$errorMsg</span></span><span>;
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>위의 코드에서는 먼저 mysqli :: debug 를 통해 디버그 정보를 활성화하고 OB_START 및 OB_GET_CLEAN을 사용 하여이 정보를 캡처합니다. 그런 다음 디버그 출력이 Error_Log 를 통해 지정된 로그 파일에 로그인됩니다. SQL 쿼리가 실행되면 쿼리가 실패하면 오류 메시지를 동일한 로그 파일에 로그인합니다.
생산 환경에서는 과도한 디버깅 정보가 로그 파일에서 빠르게 크게 될 수있어 시스템 성능에 영향을 줄 수 있습니다. 따라서 환경 조건 (예 : 개발 환경 및 생산 환경)에 따라 디버그 출력을 유연하게 조정할 수 있습니다.
예를 들어, 개발 환경에서 자세한 디버깅 정보를 켜고 생산 환경에서 꺼집니다.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">"localhost"</span></span><span>, </span><span><span class="hljs-string">"username"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"database"</span></span><span>);
</span><span><span class="hljs-comment">// 开发环境下디버그 모드를 켭니다</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">getenv</span></span><span>(</span><span><span class="hljs-string">'ENVIRONMENT'</span></span><span>) === </span><span><span class="hljs-string">'development'</span></span><span>) {
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">debug</span></span><span>(</span><span><span class="hljs-string">"d:t"</span></span><span>);
}
</span><span><span class="hljs-comment">// 구현하다 SQL 질문</span></span><span>
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"SELECT * FROM users"</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span>) {
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-variable">$result</span></span><span>-></span><span><span class="hljs-title function_ invoke__">fetch_assoc</span></span><span>()) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"User: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'name'</span></span><span>] . </span><span><span class="hljs-string">"<br>"</span></span><span>;
}
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-variable">$errorMsg</span></span><span> = </span><span><span class="hljs-string">"Query failed: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->error;
</span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-variable">$errorMsg</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">"/path/to/your/logfile.log"</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$errorMsg</span></span><span>;
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>MySQLI :: Debug 및 Error_Log를 결합함으로써 개발자는 MySQL 데이터베이스의 디버깅 정보를 효과적으로 캡처하고 녹음하여 파일 로그를 출력하여 후속 분석 및 문제 위치를보다 쉽게 출력 할 수 있습니다. 개발 환경에서 디버깅 정보는 개발자가 문제를 신속하게 식별하는 데 도움이 될 수 있지만, 제작 환경에서는 합리적인 로깅이 시스템의 안정적인 작동을 보장하는 동시에 편리하게 역 추적하고 잠재적 인 문제를 해결할 수 있습니다.
관련 태그:
mysqli