현재 위치: > 최신 기사 목록> 알아? mysqli :: $ errno는 자동으로 재설정되지 않습니다. 이 함정을 사용할 때주의하십시오

알아? mysqli :: $ errno는 자동으로 재설정되지 않습니다. 이 함정을 사용할 때주의하십시오

M66 2025-06-23

PHP의 MySQLI Extension을 사용할 때 MySQLI :: $ Errno는 마지막 데이터베이스 작업에서 오류 코드를 저장하는 매우 중요한 속성입니다. 일반적으로 데이터베이스 작업이 성공했는지 또는 오류 처리를 수행하는지 확인하는 데 사용합니다. 그러나 주목할만한 지점 인 mysqli :: $ errno 가 있습니다. 오늘,이 문제에 대해 논의합시다.

1. mysqli :: $ errno 의 역할

mysqli :: $ errno 는 MySQLI 클래스의 속성으로, 마지막 데이터베이스 작업의 오류 코드를 반환합니다. 데이터베이스 작업에 오류가 없으면 mysqli :: $ errno는 0을 반환합니다. 대신 특정 오류 유형을 나타내는 오류 코드를 반환합니다.

예를 들어, 쿼리를 실행할 때 쿼리가 성공하면 mysqli :: $ errno는 0을 반환합니다. 쿼리가 실패하면 해당 오류 코드가 반환됩니다.

 <?php
$mysqli = new mysqli("localhost", "user", "password", "database");

if ($mysqli->connect_errno) {
    echo "연결이 실패했습니다: " . $mysqli->connect_error;
    exit();
}

$query = "SELECT * FROM non_existent_table";
$mysqli->query($query);

if ($mysqli->errno) {
    echo "쿼리가 실패했습니다,오류 코드:" . $mysqli->errno;
}
?>

위의 예에서 쿼리를 실행하는 동안 오류가 발생하면 $ mysqli-> errno가 오류를 나타내는 숫자를 반환합니다.

2. 주요 질문 : mysqli :: $ errno는 자동으로 재설정되지 않습니다

문제는 각각의 새 데이터베이스 작동 전에 mysqli :: $ errno가 자동으로 지우지 않을 때 발생합니다. 경우에 따라 오류 코드가 발생할 수있어 후속 데이터베이스 작업이 실패로 잘못 판단됩니다. 후속 작업에 오류가 없더라도 $ mysqli-> errno는 여전히 마지막 오류의 오류 코드를 반환하기 때문에 특정 작업을 처리 할 때 매우 혼란 스러울 수 있습니다.

예를 들어:

 <?php
$mysqli = new mysqli("localhost", "user", "password", "database");

$query1 = "SELECT * FROM valid_table";
$mysqli->query($query1);

$query2 = "SELECT * FROM non_existent_table";
$mysqli->query($query2);

// 현재,$mysqli->errno 依然会返回上次错误查询的오류 코드,而不是当前查询的오류 코드
if ($mysqli->errno) {
    echo "쿼리가 실패했습니다,오류 코드:" . $mysqli->errno;
}
?>

위의 코드에서, 두 번째 쿼리가 실패하더라도 $ mysqli-> errno는 올바른 오류 코드를 즉시 표시하지 않을 수 있습니다 (존재하지 않는 테이블에 대한 쿼리). 실제로 첫 번째 쿼리 (있는 경우)의 오류 코드가 표시되어 잘못 판단됩니다.

3.이 문제를 피하는 방법

이 함정을 피하기 위해 가장 좋은 방법은 새 쿼리 또는 데이터베이스 작업을 수행 할 때마다 MySQLI :: $ errno를 0으로 수동으로 재설정하는 것입니다. 모든 오류 코드는 mysqli :: clear_errors () 메소드를 통해 지울 수 있습니다.

 <?php
$mysqli = new mysqli("localhost", "user", "password", "database");

$query1 = "SELECT * FROM valid_table";
$mysqli->query($query1);

// 수동으로 오류가 발생합니다
$mysqli->clear_errors();

$query2 = "SELECT * FROM non_existent_table";
$mysqli->query($query2);

if ($mysqli->errno) {
    echo "쿼리가 실패했습니다,오류 코드:" . $mysqli->errno;
}
?>

이런 식으로, 새로운 작업을 방해하는 오래된 오류 코드를 피하기 전에 $ mysqli-> errno 가 각 쿼리 전에 깨끗한지 확인할 수 있습니다.

4. 결론

mysqli :: $ errno는 데이터베이스 오류를 식별하고 처리하는 데 도움이되는 MySQLI에서 매우 유용한 속성입니다. 그러나 숨겨진 구덩이가 있습니다. 자동으로 재설정되지 않습니다. 즉, 오류 코드를 수동으로 지우지 않으면 오류 코드가 유지 될 수 있으며 이는 후속 작업의 오류 처리에 영향을 미칩니다. 이를 피하기 위해 새 데이터베이스 작업을 수행하기 전에 MySQLI :: CLEAR_ERRORS () 메소드를 사용하여 오류 코드를 수동으로 지우는 것이 좋습니다.