데이터베이스 작업에 MySQLI를 사용할 때는 종종 MySQLI :: $ errno의 비정상적인 변화 문제가 발생합니다. mysqli :: $ errno는 데이터베이스 연결 또는 쿼리 중에 오류 코드를 얻는 데 사용되는 속성입니다. 일반적으로 개발자가 오류 문제를 해결하는 데 도움이 될 수 있습니다. 그러나 우리가 쿼리를 할 때, 우리는 때때로 mysqli :: $ errno 의 가치가 기대치와 일치하지 않아 프로그램에서 예상치 못한 행동을 초래한다는 것을 알게됩니다. 현재 잠재적 인 이유가 간과됩니다. 결과 세트는 해제되지 않습니다.
mysqli :: $ errno는 mysqli 객체의 속성입니다. 이전 MySQL 작업 중에 생성 된 오류 코드 (예 : 쿼리, 연결 등)를 저장합니다. 작업이 성공하면 mysqli :: $ errno는 0을 반환합니다. 작업이 실패하면 0이 아닌 오류 코드를 반환합니다. 이러한 오류 코드를 기반으로 MySQL 오류의 특정 원인을 찾을 수 있습니다.
일반적인 오류 코드에는 다음이 포함됩니다.
1045 : 액세스 거부 (사용자의 액세스 거부)
1064 : 구문 오류 (구문 오류)
2002 : MySQL 서버에 연결할 수 없습니다 (MySQL 서버에 연결할 수 없습니다)
일반적으로 데이터베이스 작업이 실패하면 mysqli :: $ errno 및 mysqli :: $ 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 운영을 더 잘 이해하고 오류를 피하는 방법을 더 잘 이해하려면 다음 리소스를 참조하십시오.