mysqli :: get_warnings는 최근 MySQL 작업에서 생성 된 모든 경고를 검색하는 MySQLI 객체의 방법입니다. 경고는 일반적으로 쿼리 실패를 일으키지 않지만 데이터 절단, 암시 적 유형 변환 등과 같은 중요한 정보를 포함 할 수 있으며, 이는 데이터 정확도 및 디버깅을 보장하는 데 도움이됩니다.
경고를 생성 할 수있는 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 객체를 반환합니다.
예외를 사용하여 프로젝트에서 데이터베이스 오류를 포착하는 경우에도 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();
}
?>
현재 정상 오류는 예외에 의해 잡히고 경고는 로그에 로그인됩니다.
배치 데이터 작성 또는 복잡한 트랜잭션이 수행되면 경고 정보가 특히 중요하며, 이는 데이터 자료 또는 제약 조건이 완전히 충족되지 않은 문제를 제기 할 수 있습니다.
<?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();
}
}
?>
이는 필드 길이 오버플로와 같은 데이터 잘림 경고를 감지하는 데 도움이 될 수 있습니다.
get_warnings는 경고 메시지를 지원하기 위해 MySQL 서버에 의존하며 일반적으로 MySQL 5.6 이상이 필요합니다. 하위 버전은 경고를 반환하거나 불안정하게 행동 할 수 없습니다.
심각한 오류로 인해 SQL 쿼리가 실패하면 get_warnings는 경고 메시지를 반환하지 않으며 오류 처리 메커니즘을 통해 오류를 잡아야합니다.
get_warnings ()를 호출하여 반환 된 객체는 메모리 누출을 방지하기 위해 기본 리소스를 해제하기 위해 Close () 메소드를 명시 적으로 호출해야합니다.
경고 메시지는 때때로 SQL 세부 사항 또는 데이터 상태를 노출시킵니다. 정보 유출을 피하기 위해 생산 환경에서 로그 출력을주의 깊게 처리해야합니다.
mysqli :: get_warnings는 PHP 개발의 데이터베이스 경고를 모니터링하는 효과적인 도구입니다. 잠재적 인 데이터 문제와 숨겨진 위험을 미리 감지 할 수 있습니다. 중요한 데이터베이스 작업 후에이 기능을 호출하고 로그 또는 디버깅 도구를 결합하여 프로그램의 안정성과 유지 관리를 향상시키는 것이 좋습니다. 동시에 MySQL 버전 호환성 및 리소스 릴리스에주의를 기울여 응용 프로그램 성능 및 보안을 보장하십시오.