현재 위치: > 최신 기사 목록> mysqli :: get_warnings의 권장 사용 패턴 및 예방 조치

mysqli :: get_warnings의 권장 사용 패턴 및 예방 조치

gitbox 2025-05-26

mysqli :: get_warnings는 무엇입니까?

mysqli :: get_warnings는 최근 MySQL 작업에서 생성 된 모든 경고를 검색하는 MySQLI 객체의 방법입니다. 경고는 일반적으로 쿼리 실패를 일으키지 않지만 데이터 절단, 암시 적 유형 변환 등과 같은 중요한 정보를 포함 할 수 있으며, 이는 데이터 정확도 및 디버깅을 보장하는 데 도움이됩니다.


권장 사용 모드

1. 기본 사용

경고를 생성 할 수있는 SQL 문을 실행 한 후 get_warnings를 통해 경고 객체를 가져옵니다.

 <?php
$mysqli = new mysqli('gitbox.net', 'user', 'password', 'database');

$mysqli->query("INSERT INTO users (id, name) VALUES (1, 'Alice'), (1, 'Bob')"); // 고유 한 제약을 위반할 수 있습니다

if ($warning = $mysqli->get_warnings()) {
    do {
        printf("Warning: %d: %s\n", $warning->errno, $warning->message);
    } while ($warning->next());
    $warning->close();
}
?>

이 코드에서 get_warnings ()는 모든 경고 및 출력 경고 표시 및 경고 메시지를 가로 질러 MySQLI_Warning 객체를 반환합니다.


2. 예외 처리와 함께 사용하십시오

예외를 사용하여 프로젝트에서 데이터베이스 오류를 포착하는 경우에도 get_warnings를 통해 비 치명적 인 경고를받을 수 있습니다.

 <?php
$mysqli = new mysqli('gitbox.net', 'user', 'password', 'database');
$mysqli->report_mode = MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT;

try {
    $mysqli->query("UPDATE products SET price = price * 1.1 WHERE id = 5");
    
    if ($warning = $mysqli->get_warnings()) {
        do {
            error_log("MySQL Warning: {$warning->errno} - {$warning->message}");
        } while ($warning->next());
        $warning->close();
    }
} catch (mysqli_sql_exception $e) {
    echo "Error: " . $e->getMessage();
}
?>

현재 정상 오류는 예외에 의해 잡히고 경고는 로그에 로그인됩니다.


3. 배치 인서트 및 복잡한 작업에서 경고를 확인하십시오

배치 데이터 작성 또는 복잡한 트랜잭션이 수행되면 경고 정보가 특히 중요하며, 이는 데이터 자료 또는 제약 조건이 완전히 충족되지 않은 문제를 제기 할 수 있습니다.

 <?php
$mysqli = new mysqli('gitbox.net', 'user', 'password', 'database');

$values = [
    "(1, 'LongNameExceedingLimit')",
    "(2, 'NormalName')"
];
$sql = "INSERT INTO customers (id, name) VALUES " . implode(',', $values);

$mysqli->query($sql);

if ($warning = $mysqli->get_warnings()) {
    while ($warning) {
        echo "Warning {$warning->errno}: {$warning->message}\n";
        $warning = $warning->next();
    }
}
?>

이는 필드 길이 오버플로와 같은 데이터 잘림 경고를 감지하는 데 도움이 될 수 있습니다.


일반적인 예방 조치

1. 지원되는 MySQL 버전에서만 유효합니다

get_warnings는 경고 메시지를 지원하기 위해 MySQL 서버에 의존하며 일반적으로 MySQL 5.6 이상이 필요합니다. 하위 버전은 경고를 반환하거나 불안정하게 행동 할 수 없습니다.

2. 쿼리가 실패하면 경고를받을 수 없습니다

심각한 오류로 인해 SQL 쿼리가 실패하면 get_warnings는 경고 메시지를 반환하지 않으며 오류 처리 메커니즘을 통해 오류를 잡아야합니다.

3. 자원을 풀어주는 데주의를 기울이십시오

get_warnings ()를 호출하여 반환 된 객체는 메모리 누출을 방지하기 위해 기본 리소스를 해제하기 위해 Close () 메소드를 명시 적으로 호출해야합니다.

4. 경고 정보에는 민감한 데이터가 포함될 수 있습니다

경고 메시지는 때때로 SQL 세부 사항 또는 데이터 상태를 노출시킵니다. 정보 유출을 피하기 위해 생산 환경에서 로그 출력을주의 깊게 처리해야합니다.


요약

mysqli :: get_warnings는 PHP 개발의 데이터베이스 경고를 모니터링하는 효과적인 도구입니다. 잠재적 인 데이터 문제와 숨겨진 위험을 미리 감지 할 수 있습니다. 중요한 데이터베이스 작업 후에이 기능을 호출하고 로그 또는 디버깅 도구를 결합하여 프로그램의 안정성과 유지 관리를 향상시키는 것이 좋습니다. 동시에 MySQL 버전 호환성 및 리소스 릴리스에주의를 기울여 응용 프로그램 성능 및 보안을 보장하십시오.