현재 위치: > 최신 기사 목록> 왜 $ errno가 항상 0인데, 쿼리가 성공하지 못하는가?

왜 $ errno가 항상 0인데, 쿼리가 성공하지 못하는가?

M66 2025-05-30

MySQL 확장자는 데이터베이스 작업에 PHP 및 MySQL을 사용할 때 일반적인 선택입니다. 데이터베이스 쿼리 디버깅 오류의 경우 MySQLI :: $ errnomySQLI :: $ 오류가 매우 유용한 도구입니다. 개발자가 데이터베이스 오류 코드 및 오류 정보를 얻는 데 도움이 될 수 있습니다. 그러나 때로는 개발자 가이 상황에 직면 할 수 있습니다. mysqli :: $ errno는 0을 반환하지만 쿼리 작동은 여전히 ​​실패합니다. 그렇다면 왜 이런 일이 발생합니까? 아래에서 깊이 논의 해 봅시다.

1. mysqli :: $ errno 의 역할

mysqli :: $ errno 속성에는 마지막 MySQL 작업에서 발생한 오류 코드가 포함되어 있습니다. 일반적으로 0 은 오류가 발생하지 않았지만 0이 아닌 값은 일부 오류가 발생했음을 나타냅니다. 이것은 MySQL 데이터베이스 시스템의 오류 코드입니다. mysqli :: $ 오류 와 함께 문제를 신속하게 찾는 데 도움이 될 수 있습니다.

2. mysqli :: $ errno가 반환하는 경우

쿼리 실패에도 불구하고 mysqli :: $ errno는 여전히 0을 반환합니다. 이는 몇 가지 이유 때문일 수 있습니다.

2.1 SQL 쿼리 자체는 MySQL 오류를 생성하지 않습니다.

mysqli :: $ errno는 mysql 서버의 오류 코드 만 반환합니다. 쿼리에 MySQL 오류 (예 : 구문 오류, 연결 문제 등)가 트리거되지 않으면 mysqli :: $ errno는 여전히 0 일 수 있습니다. 현재 쿼리가 빈 결과를 반환하더라도 MySQL 실행 중에 오류가 발생했음을 의미하지는 않습니다.

예를 들어, 쿼리가 결과와 일치하지 않으면 MySQL은 오류를 반환하지 않지만 간단히 빈 결과 세트를 반환합니다. 현재 MySqli :: $ errno 는 여전히 0 이며 쿼리 자체는 실패하지 않습니다.

2.2 비 정기 유형 SQL 쿼리가 사용됩니다

일부 SQL 쿼리 (예 : 삽입 , 업데이트 또는 삭제 )는 성공적으로 실행될 수 있지만 영향을받는 행의 수는 0 , 즉 데이터베이스의 데이터가 실제로 수정되지 않았습니다. 이것이 실수는 아니지만 개발자는 쿼리가 성공적이지 않다고 생각하여 오해를 초래할 수 있습니다. 성공 여부를 더 잘 결정하기 위해 MySQLI_AFFECTED_ROWS ()를 확인하여 행에 영향을 받는지 확인할 수 있습니다.

2.3 데이터베이스 연결 문제

때로는 쿼리 전에 데이터베이스 연결이 만료되거나 분리되었을 수 있으며 MySQLI :: $ errno는 즉시 오류를 반환하지 않습니다. mysqli :: $ connect_errno를 확인하여 데이터베이스 연결이 정상인지 확인할 수 있습니다.

3.이 문제를 디버그하는 방법은 무엇입니까?

mysqli :: $ errno가 항상 0을 반환하지만 쿼리가 여전히 실패한다는 것을 알게되면 다음 방법을 사용하여 디버그 할 수 있습니다.

3.1 MySQLI :: $ 오류를 사용하여 자세한 정보를 얻으십시오

mysqli :: $ 오류 속성에는 현재 작업과 관련된 MySQL 오류 정보가 포함되어 있습니다. mysqli :: $ errno가 0을 반환하더라도 mysqli :: $ error를 통해 여전히 단서를 얻을 수 있습니다. errno0 이더라도 오류가 추가 힌트를 줄 수 있습니다.

 if ($mysqli->errno) {
    echo "Error number: " . $mysqli->errno . "<br>";
    echo "Error message: " . $mysqli->error . "<br>";
}

3.2 SQL 문을 점검하십시오

SQL 쿼리에 구문 또는 논리 오류가 없는지 확인하십시오. 쿼리를 인쇄하고 phpmyadmin과 같은 데이터베이스 관리 도구에서 직접 실행하여 예상 결과가 반환되는지 확인할 수 있습니다.

3.3 영향을받는 행 수를 확인하십시오

인서트 , 업데이트 또는 삭제 쿼리의 경우 MySQLI_AFFECTED_ROWS () 함수가 반환 한 결과는 실행 후 확인해야합니다. 0이 반환되면 쿼리가 실행되었지만 데이터가 수정되지 않았 음을 의미합니다.

 $affected_rows = $mysqli->affected_rows;
if ($affected_rows === 0) {
    echo "No rows were affected by the query.<br>";
}

3.4 데이터베이스 연결을 확인하십시오

데이터베이스 연결 문제라고 의심되는 경우 MySQLI_CONNECT_ERRNO ()를 사용하여 데이터베이스 연결이 성공했는지 확인할 수 있습니다.

 if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

4. 요약

mysqli :: $ errno를 사용하는 경우 0을 반환하지만 쿼리가 여전히 실패하면 쿼리가 MySQL 오류를 생성하지 않거나 쿼리가 데이터를 수정하지 않거나 MySQL 오류가 아닌 다른 유형의 문제가있을 수 있습니다. 이 문제를 해결하기 위해 개발자는 mysqli :: $ error , mysqli_affected_rows () 와 같은 도구를 결합하여 포괄적 인 디버깅을 수행해야합니다. 이 단계를 통해 데이터베이스 쿼리에서 문제를보다 효과적으로 식별하고 해결할 수 있습니다.

 // 데이터베이스에 연결하십시오
$mysqli = new mysqli("localhost", "username", "password", "database");

// 질문
$query = "SELECT * FROM some_table WHERE id = 1";
$result = $mysqli->query($query);

// 결과 처리
if ($mysqli->errno) {
    echo "Error number: " . $mysqli->errno . "<br>";
    echo "Error message: " . $mysqli->error . "<br>";
}

// 연결을 닫으십시오
$mysqli->close();