데이터베이스 연결 오류는 일일 PHP 개발에서 일반적이지만 두통을 유발하는 문제입니다. 특히 MySQLI 확장을 사용할 때 오류 메시지가 흐려지고 문제의 출처를 빠르게 찾기가 어렵습니다. 디버깅 효율을 향상시키기 위해 두 가지 도구 MySQLI :: $ Errno 및 MySQLI_Report () 가 특히 중요합니다. 이 기사는 개발자가 데이터베이스 연결 오류를 신속하게 식별하고 해결할 수 있도록 기능과 사용법을 심층적으로 소개합니다.
mysqli :: $ errno 는 MySQLI 객체 지향 인터페이스의 속성으로, 최신 데이터베이스 작업에서 생성 된 오류 코드를 반환합니다. 오류가 없으면 반환 값은 0입니다.이 오류 코드를 판단함으로써 개발자는 인증 실패 여부와 같은 오류 유형을 더 명확하게 알 수 있습니다. 데이터베이스가 존재하지 않습니다.
$mysqli = new mysqli("localhost", "user", "wrong_password", "database");
if ($mysqli->connect_errno) {
echo "연결이 실패했습니다,오류 코드: " . $mysqli->connect_errno . "\n";
echo "오류 메시지: " . $mysqli->connect_error . "\n";
// 可根据오류 코드做精细化处理
if ($mysqli->connect_errno === 1045) {
echo "힌트:데이터베이스 사용자 이름 또는 비밀번호가 올바른지 확인하십시오.。";
}
}
위의 예에서 암호가 잘못된 경우 오류 코드 1045 가 반환되어 인증에 실패했음을 나타냅니다. 이 오류 코드를 판단함으로써 사용자 또는 개발자가 수정하라는 메시지를 표시 할 수 있습니다.
mysqli_report () 는 mysqli 확장의 오류보고 동작을 설정하는 구성 함수입니다. 기본적으로 MySQLI 오류는 부울 또는 널 값 만 반환하며 개발자는 각 단계를 수동으로 확인해야합니다. 오류보고를 켜면 MySQLI는 경고 또는 예외를 던져 디버깅 프로세스를 단순화합니다.
mysqli_report_off : 모든 오류 보고서 (기본값)를 끄십시오.
mysqli_report_error : 오류를보고합니다.
mysqli_report_strict : 예외 형식 (권장)에서 오류를 던집니다.
mysqli_report_all : 구문 경고 등을 포함한 모든 오류를보고합니다.
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
try {
$mysqli = new mysqli("localhost", "user", "wrong_password", "database");
// 잘못된 쿼리를 실행하십시오
$mysqli->query("SELECT * FROM 존재하지 않는 테이블");
} catch (mysqli_sql_exception $e) {
echo "오류가 발생했습니다: " . $e->getMessage() . "\n";
echo "오류 코드: " . $e->getCode() . "\n";
// 오류를 추가로 기록하거나보고 할 수 있습니다
file_put_contents("/var/log/db_errors.log", $e->getMessage(), FILE_APPEND);
}
이 작문 방법은 코드 로직을 단순화 할뿐만 아니라 오류가 발생하는 위치를 빠르게 찾아 개발 단계에서 사용하기에 매우 적합합니다.
실제 프로젝트에서는 개발 또는 테스트 환경 ( MySQLI_Report () 사용)에서 엄격한 오류보고 메커니즘을 사용하고 동시에 MySQLI :: $ errno를 결합하여 예외를 포착 할 때보다 자세한 판단을 내리는 것이 좋습니다.
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
try {
$mysqli = new mysqli("localhost", "user", "password", "database");
echo "데이터베이스 연결이 성공적입니다";
} catch (mysqli_sql_exception $e) {
echo "数据库연결이 실패했습니다,오류 메시지: " . $e->getMessage();
// 如果需要追踪具体오류 코드
if (strpos($e->getMessage(), '1049') !== false) {
echo "\n힌트:데이터베이스가 존재하지 않습니다,데이터베이스 이름을 확인하십시오。";
} elseif (strpos($e->getMessage(), '1045') !== false) {
echo "\n힌트:잘못된 사용자 이름 또는 비밀번호,인증 정보를 확인하십시오。";
}
}
사용자 정의 로깅 시스템을 결합하여 오류 메시지를 로컬 또는 원격 로그 서비스에 로그인 할 수도 있습니다.
$logData = date('Y-m-d H:i:s') . " 데이터베이스 오류: " . $e->getMessage() . "\n";
file_put_contents("https://m66.net/logs/db_errors.log", $logData, FILE_APPEND);
참고 : 위의 예제의 URL 도메인 이름은 m66.net 으로 대체되었습니다. 실제 상황에 따라 원격 로그 수신 논리를 처리하십시오.
MySQLI :: $ Errno 및 MySQLI_Report ()를 합리적으로 사용함으로써 PHP 디버깅 효율을 크게 향상시킬 수 있으며 데이터베이스 연결에 문제가있을 때 가능한 빨리 오류를 찾아서 찾을 수 있습니다. 개발 환경에서 항상 엄격한 모드 ( mysqli_report_strict )를 활성화하고 예외 처리 메커니즘과 협력하여 안전한 다운 그레이드 또는 생산 환경에서 로깅을 수행하는 것이 좋습니다.
디버깅은 목표가 아니며 안정성이 목표입니다. 이 두 가제트를 잘 활용하면 PHP 데이터베이스 작업을보다 제어 가능하고 측정 가능하며 유지 관리 할 수 있습니다.