현재 위치: > 최신 기사 목록> 결과 세트를 해제하는 것을 잊어 버렸습니다. $ errno는 비정상적으로 변경됩니다.

결과 세트를 해제하는 것을 잊어 버렸습니다. $ errno는 비정상적으로 변경됩니다.

M66 2025-05-29

데이터베이스 작업에 MySQLI를 사용할 때는 종종 MySQLI :: $ errno의 비정상적인 변화 문제가 발생합니다. mysqli :: $ errno는 데이터베이스 연결 또는 쿼리 중에 오류 코드를 얻는 데 사용되는 속성입니다. 일반적으로 개발자가 오류 문제를 해결하는 데 도움이 될 수 있습니다. 그러나 우리가 쿼리를 할 때, 우리는 때때로 mysqli :: $ errno 의 가치가 기대치와 일치하지 않아 프로그램에서 예상치 못한 행동을 초래한다는 것을 알게됩니다. 현재 잠재적 인 이유가 간과됩니다. 결과 세트는 해제되지 않습니다.

mysqli :: $ errno 란 무엇입니까?

mysqli :: $ errno는 mysqli 객체의 속성입니다. 이전 MySQL 작업 중에 생성 된 오류 코드 (예 : 쿼리, 연결 등)를 저장합니다. 작업이 성공하면 mysqli :: $ errno는 0을 반환합니다. 작업이 실패하면 0이 아닌 오류 코드를 반환합니다. 이러한 오류 코드를 기반으로 MySQL 오류의 특정 원인을 찾을 수 있습니다.

일반적인 오류 코드에는 다음이 포함됩니다.

  • 1045 : 액세스 거부 (사용자의 액세스 거부)

  • 1064 : 구문 오류 (구문 오류)

  • 2002 : MySQL 서버에 연결할 수 없습니다 (MySQL 서버에 연결할 수 없습니다)

일반적으로 데이터베이스 작업이 실패하면 mysqli :: $ errnomysqli :: $ error (오류 메시지)를 사용하여 문제를 결정할 수 있습니다.

왜 비정상적으로 변하는가?

쿼리에 MySQLI를 사용하면 MySQLI :: $ errno 의 값이 때때로 예상대로, 특히 쿼리가 실행 된 후에도 무의미 해집니다. 시간 내에 쿼리 결과를 해제하지 않으면 mysqli :: $ errno가 비현실적인 오류 코드가 될 수 있습니다. 이는 MySQL의 연결 리소스가 완전히 릴리스되지 않았으므로 영향을받을 수있는 후속 쿼리가 발생하기 때문입니다.

결과 세트를 공개하는 역할

mysqli_query () 와 같은 함수를 사용하여 쿼리를 실행하면 MySQL은 쿼리 결과를 메모리에 저장합니다. 리소스를 저장하려면 쿼리가 완료된 후 MySQLI_Free_Result () 함수를 사용하여 쿼리 결과 세트를 명시 적으로 릴리스해야합니다. 이는 무료 메모리에 도움이 될뿐만 아니라 미공개 결과 세트의 영향을받을 수있는 후속 작업을 피합니다.

결과 세트가 해제되지 않습니다

쿼리를 실행하고 쿼리가 완료된 후 mysqli_free_result ()가 호출되어 결과 세트를 자유롭게하지 않습니다. 다음으로 다른 쿼리 작업을 수행하려고하면 다음 상황이 발생할 수 있습니다.

 <?php
// 데이터베이스에 연결하십시오
$mysqli = new mysqli('localhost', 'root', 'password', 'test_db');

// 첫 번째 쿼리를 실행하십시오
$result1 = $mysqli->query("SELECT * FROM users");

// 결과 세트가 해제되지 않으면
// $mysqli->free_result($result1);  // 릴리스를 무시하십시오

// 두 번째 쿼리를 실행하십시오
$result2 = $mysqli->query("SELECT * FROM orders");

// 오류 메시지를 받으십시오
echo "오류 코드: " . $mysqli->errno;
?>

위의 코드에서, 첫 번째 쿼리의 결과 세트를 해제하지 않았으므로 $ mysqli-> errno는 두 번째 쿼리에서 예외가있을 수있어 오류 코드를 올바르게 얻을 수없고 오류 상태 코드도 반환됩니다. 이것은 mysqli :: $ errno 의 비정상적인 변화의 근본 원인입니다.

그것을 해결하는 방법?

mysqli :: $ errno 의 비정상적인 변화를 피하려면 각 쿼리가 실행 된 후 쿼리 결과 세트가 제 시간에 해제되도록해야합니다. 올바른 방법은 다음과 같습니다.

 <?php
// 데이터베이스에 연결하십시오
$mysqli = new mysqli('localhost', 'root', 'password', 'test_db');

// 첫 번째 쿼리를 실행하십시오
$result1 = $mysqli->query("SELECT * FROM users");

// 결과 세트를 릴리스하십시오
if ($result1) {
    $result1->free();
}

// 두 번째 쿼리를 실행하십시오
$result2 = $mysqli->query("SELECT * FROM orders");

// 오류 메시지를 받으십시오
echo "오류 코드: " . $mysqli->errno;
?>

결과 세트를 명시 적으로 공개함으로써 각 쿼리 후에 자원이 정리되고 후속 작업에 영향을 미치지 않도록 할 수 있습니다.

요약

데이터베이스 작업에 MySQLI를 사용할 때 MySQLI :: $ Errno 의 비정상적인 변경 이유는 종종 쿼리 결과 세트를 해제하는 것을 잊어 버리기 때문입니다. 결과 세트를 출시하면 메모리를 저장하는 데 도움이 될뿐만 아니라 후속 작업이 영향을받지 않도록합니다. 따라서 각 쿼리가 완료되면 쿼리 결과 세트를 릴리스하기 위해 시간에 mysqli_free_result () 또는 $ result-> free ()를 사용하여 불필요한 오류 및 예외를 피해야합니다.

관련 리소스

MySQLI 운영을 더 잘 이해하고 오류를 피하는 방법을 더 잘 이해하려면 다음 리소스를 참조하십시오.