PHP에서 MySQL 데이터베이스를 사용하는 경우 오류를 잡는 것 외에도 데이터베이스에서 발행 한 경고 메시지에주의를 기울여야합니다. 이러한 경고는 데이터 절단, 필드 길이 제한 등과 같은 잠재적 문제를 나타낼 수 있습니다 . mySQLI :: get_warnings 함수는 추가 처리를 위해 이러한 경고 정보를 얻는 데 도움이 될 수 있습니다.
이 기사에서는 MySQLI :: get_warnings를 사용하여 메일 시스템과 결합하여 간단한 예외 알림 서비스를 구축하는 방법을 소개합니다. 데이터베이스 조작이 경고를 생성하면 경고 내용이 이메일을 통해 관리자에게 자동으로 전송되어 잠재적 인 문제의 적시 발견 및 처리를 용이하게합니다.
mysqli :: get_warnings는 최신 데이터베이스 작업에 의해 생성 된 경고 정보를 얻기 위해 PHP의 MySQLI 확장에 제공된 메소드입니다.
사용 예 :
$mysqli = new mysqli('gitbox.net', 'user', 'password', 'database');
$mysqli->query("INSERT INTO table_name (col) VALUES ('더 긴 끈...')");
if ($warnings = $mysqli->get_warnings()) {
do {
echo "Warning: ({$warnings->errno}) {$warnings->message}\n";
} while ($warnings->next());
}
이 메소드는 Errno (경고 코드), 메시지 (경고 메시지) 및 다음 () 메소드가 모든 경고를 통과하는 데 사용되는 MySQLI_Warning 객체를 반환합니다.
데이터베이스 작업을 실행 한 후 Get_warnings 에 전화하여 경고가 있는지 확인하십시오.
경고가있는 경우 모든 경고 정보를 수집하십시오.
메일 시스템을 통해 경고 메시지가 사전 설정 관리자 사서함으로 전송됩니다.
실제 비즈니스 에서이 단계는 자동 감지 및 알림을 실현하기 위해 데이터베이스 작업의 캡슐화 기능에 통합 될 수 있습니다.
다음 예제는 데이터베이스 작동 후 경고를 감지하고 이메일 알림을 보내는 방법을 보여줍니다.
<?php
$mysqli = new mysqli('gitbox.net', 'user', 'password', 'database');
if ($mysqli->connect_errno) {
die("연결이 실패했습니다: " . $mysqli->connect_error);
}
$sql = "INSERT INTO users (username) VALUES ('길이 이상의 사용자 이름의 예……')";
$mysqli->query($sql);
$warnings = $mysqli->get_warnings();
if ($warnings) {
$warningMessages = [];
do {
$warningMessages[] = "Warning ({$warnings->errno}): {$warnings->message}";
} while ($warnings->next());
$subject = "데이터베이스 경고 알림";
$body = "다음은 최근 데이터베이스 작업에서 생성 된 경고 메시지입니다.:\n\n" . implode("\n", $warningMessages);
$to = "[email protected]";
$headers = "From: [email protected]";
// 이메일을 보내십시오
if (mail($to, $subject, $body, $headers)) {
echo "경고 알림 이메일이 전송되었습니다。";
} else {
echo "이메일 전송 실패。";
}
} else {
echo "데이터베이스 경고가 감지되지 않았습니다。";
}
$mysqli->close();
?>
로깅 : 이메일 보내기 외에도 후속 감사 및 문제 해결을 용이하게하기 위해 로그 파일에 경고 정보를 작성하는 것이 좋습니다.
비동기 알림 : 이메일 보내기가 비즈니스 프로세스를 차단할 수있는 경우 대기열 또는 비동기 작업을 사용하여 이메일 전송을 처리 할 수 있습니다.
더 많은 알람 채널 : SMS 및 WeChat과 같은 다른 인스턴트 알림 방법과 결합하여 경보 응답 속도를 향상시킵니다.
예외 캡슐화 : 데이터베이스 작동 함수 캡슐화, 오류 및 경고를 균일하게 캡처하고 중복 코드를 피하십시오.