PHP 응용 프로그램을 개발할 때 MySQLI 확장은 MySQL 데이터베이스와 상호 작용하는 일반적인 방법입니다. 데이터베이스 작업 오류가 발생하면 오류 코드는 일반적으로 mysqli :: $ errno를 통해 얻어지고 오류 정보는 mysqli :: $ 오류 와 함께 얻습니다. 그러나 이러한 오류 정보를 로그에 효과적으로 분류, 분석 및 기록하는 방법은 애플리케이션 신뢰성을 향상시키는 중요한 단계입니다.
이 기사는 PHP의 MySQLI :: $ errno 및 로깅 시스템을 통해 MySQL 오류를 분류하고 기록하는 방법을 설명합니다. 이를 통해 데이터베이스 연결 문제, 쿼리 실패 및 기타 오류를 더 잘 추적하고 처리 할 수있어 나중에 문제를 해결하고 수리 할 수 있습니다.
먼저 MySQLI 를 통해 오류 정보를 얻는 방법을 알아야합니다. MySQLI 클래스는 데이터베이스 관련 오류를 찾는 데 도움이되는 몇 가지 속성을 제공합니다.
mysqli :: $ errno : 이전 MySQL 작업의 오류 코드를 반환합니다.
mysqli :: $ error : 이전 mySQL 작업의 오류 메시지를 반환합니다.
이 정보를 사용하여 각 데이터베이스 작업이 성공했는지 확인할 수 있습니다. 실패하면이 정보를 사용하여 자세한 오류 설명을 얻을 수 있습니다.
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
// 연결을 확인하십시오
if ($mysqli->connect_error) {
echo "연결이 실패했습니다: " . $mysqli->connect_error;
exit();
}
// 실행 a SQL 질문
$result = $mysqli->query("SELECT * FROM non_existent_table");
if (!$result) {
// 오류 코드 및 오류 메시지를 캡처합니다
$errno = $mysqli->errno;
$error = $mysqli->error;
echo "MySQL 오류 번호: $errno, 오류 메시지: $error";
}
?>
쿼리 실행이 실패하면 mysqli :: $ errno 및 mysqli :: $ 오류를 사용하여 오류 정보를 캡처하고 기록 할 수 있습니다.
다음으로 이러한 오류 메시지를 로그 시스템에 통합합니다. 로그 파일에 오류 정보를 출력하거나 독백과 같은 기존 로그 라이브러리를 사용하여보다 복잡한 로깅 기능을 구현하는 것이 일반적입니다.
가장 쉬운 방법은 PHP의 내장 로깅 함수 error_log () 를 사용하여 로그 오류입니다.
<?php
// 로그 파일 경로를 구성합니다
$log_file = "/path/to/your/logfile.log";
// 捕获오류 메시지并写入日志
if (!$result) {
$errno = $mysqli->errno;
$error = $mysqli->error;
$log_message = date("Y-m-d H:i:s") . " - 오류 번호: $errno, 오류 메시지: $error\n";
error_log($log_message, 3, $log_file);
}
?>
보다 유연한 로깅을 위해서는 독백을 타사 라이브러리로 사용할 수 있습니다. 독백은 파일, 데이터베이스, 이메일 및 기타 채널에 로그를 출력 할 수있는 다양한 로그 프로세서를 지원하고 로그 레벨 (예 : 디버그 , 정보 , 오류 등)을 지원합니다.
<?php
require 'vendor/autoload.php';
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
// 로그 채널을 만듭니다
$log = new Logger('my_logger');
$log->pushHandler(new StreamHandler('/path/to/your/logfile.log', Logger::ERROR));
// 执行질문并捕获실수
if (!$result) {
$errno = $mysqli->errno;
$error = $mysqli->error;
// 记录오류 메시지到日志
$log->error("MySQL 오류 번호: $errno, 오류 메시지: $error");
}
?>
로그를 통해 오류 정보를 기록 할뿐만 아니라 다양한 유형의 오류에 따라 분류 할 수 있습니다. 예를 들어, 데이터베이스 연결 고장, SQL 쿼리 구문 오류, 데이터 제약 위반 등.이 오류는 나중에 분석을 위해 별도로 기록 할 수 있습니다.
다른 유형의 오류에 대해 다른 로그 레벨을 정의 할 수 있습니다.
<?php
if ($mysqli->connect_error) {
$log->critical("数据库연결이 실패했습니다: " . $mysqli->connect_error);
} elseif (!$result) {
$errno = $mysqli->errno;
$error = $mysqli->error;
if ($errno == 1146) {
$log->warning("테이블에는 오류가 없습니다: $error");
} else {
$log->error("다른 MySQL 실수: $error");
}
}
?>
이 예에서는 데이터베이스 연결이 실패하면 임계 레벨을 사용하여 로그를 기록하여 심각한 오류가 나타납니다. 표에 존재하지 않는 오류의 경우 경고 레벨 레코드를 사용합니다.
오류 로그를 사용하면 이러한 로그를 분석하여 응용 프로그램에서 잠재적 인 문제를 찾을 수 있습니다. 예를 들어 GREP 명령을 사용하여 로그 파일에서 특정 오류를 찾거나 일부 로그 분석 도구를 사용하여보다 심층 분석을 수행 할 수 있습니다.
데이터베이스 오류를 자동으로 모니터링하려면 일부 시스템 모니터링 도구 (예 : ELK 스택, 그레이 로그 등)를 결합하여 로그 집계 및 분석을 통해 데이터베이스 오류를 감지하고 응답 할 수 있습니다.
MySQLI :: $ errno를 로그 시스템과 통합하면 MySQL 데이터베이스 작업에서 오류를 더 잘 관리하고 모니터링 할 수 있습니다. 이는 오류를 잡고 분류하는 데 도움이 될뿐만 아니라 나중에 오류 분석 및 디버깅을 용이하게하여 응용 프로그램의 신뢰성과 안정성을 향상시킵니다.
MySQLI 오류 정보와 결합 된 프로젝트에서 Monolog와 같은 로그 라이브러리를 사용한 경우보다 효율적인 오류 추적 및 처리를 달성 할 수 있습니다. 오류를 분류하고 분석하는 것도 시스템 최적화의 중요한 단계이며 개발자가 잠재적 인 문제를 조기에 발견 할 수 있도록 도와줍니다.