현재 위치: > 최신 기사 목록> mysqli :: $ errno 지원 디버깅 mysqli_autocommit ()를 통해 문제를 제출하는 방법 및 오류의 원인을 찾으십시오.

mysqli :: $ errno 지원 디버깅 mysqli_autocommit ()를 통해 문제를 제출하는 방법 및 오류의 원인을 찾으십시오.

M66 2025-07-04

PHP에서 MySQLI_AUTOCIMMIT () 함수는 자동으로 트랜잭션을 자동으로 커밋하는 기능을 활성화 또는 비활성화하는 데 사용됩니다. 기본적으로 MySQL은 각 쿼리가 실행 된 후 자동으로 트랜잭션을 저장합니다. 그러나 경우에 따라 개발자는 여러 쿼리가 실행될 때 트랜잭션 일관성이 유지되도록 자동 커밋 기능을 끄야 할 수도 있습니다. 이 경우 개발자는 트랜잭션을 커밋하거나 롤백하려면 Commit () 또는 Rollback ()을 수동으로 호출해야합니다.

그러나 때때로 우리는 특히 mysqli_autocommit ()를 사용할 때 거래를 저지르는 데 문제가 있습니다. 이러한 문제를 찾기 위해 MySQLI :: $ errnomySQLI :: $ 오류 의 두 속성이 특히 중요합니다. mysqli :: $ errno는 mySQL 작업에 대한 오류 코드를 얻는 데 도움이 될 수있는 반면 mysqli :: $ 오류는 오류 정보를 제공합니다. 이 두 가지 속성을 결합하여 개발자는 쉽게 디버깅하고 문제를 찾을 수 있습니다.

mysqli :: $ errno를 사용하여 문제를 제출하려면 mysqli_autocommit () 디버깅

먼저 기본 PHP 예제를 살펴보고 트랜잭션 제어에 mysqli_autocommit ()를 사용하는 방법과 MySQLI :: $ errno를 사용하여 트랜잭션을 저지르면 오류를 디버그하는 방법을 보여줍니다.

샘플 코드

 <?php
// 데이터베이스 연결을 만듭니다
$mysqli = new mysqli("localhost", "username", "password", "database");

// 연결이 성공했는지 확인하십시오
if ($mysqli->connect_error) {
    die("연결이 실패했습니다: " . $mysqli->connect_error);
}

// 자동 트랜잭션 제출을 해제하십시오
$mysqli->autocommit(false);

// 거래를 시작하십시오
$mysqli->begin_transaction();

try {
    // 첫 번째 쿼리를 실행하십시오
    $mysqli->query("INSERT INTO users (username, email) VALUES ('user1', 'user1@m66.net')");
    
    // 두 번째 쿼리를 실행하십시오
    $mysqli->query("INSERT INTO orders (user_id, product) VALUES (1, 'product1')");

    // 오류가 있는지 확인하십시오
    if ($mysqli->errno) {
        // 오류가있는 경우,트랜잭션을 롤백하십시오
        throw new Exception("실수:".$mysqli->error);
    }

    // 거래를 제출하십시오
    $mysqli->commit();

    echo "거래가 성공적으로 제출되었습니다!";
} catch (Exception $e) {
    // 예외가 잡히면,트랜잭션을 롤백하십시오
    $mysqli->rollback();
    echo "거래 롤백,실수信息:" . $e->getMessage();
}

// 데이터베이스 연결을 닫습니다
$mysqli->close();
?>

코드 분석

  1. 데이터베이스에 연결 : 먼저 New MySQLI ()를 통해 데이터베이스 연결을 만들어 MySQL 서버에 연결했습니다. 연결이 실패하면 $ mysqli-> connect_error를 통해 오류 메시지를 받고 프로그램을 종료하십시오.

  2. 자동 커밋 끄기 : $ mysqli-> autocommit (false)을 사용하여 자동 커밋 모드를 끄십시오. 이는 각 쿼리 직후에 거래가 제출되지 않고 대신 Commit ()에게 Commit () 을 Commit을 요구하는 수동 전화가 필요하다는 것을 의미합니다.

  3. 트랜잭션 실행 : $ mysqli-> begin_transaction () 을 통해 트랜잭션을 시작하고 $ mysqli-> query () 를 통해 삽입 작업을 수행합니다. 쿼리 오류가 발생하면 $ mysqli-> errno는 오류 코드를 반환하고 $ mysqli-> 오류가 오류 설명을 반환합니다.

  4. 오류 처리 : 쿼리를 실행할 때 오류가 발생하면 if ($ mysqli-> errno) 로 오류를 판단하고 포착합니다. 오류가 발생하면 Throw New Exception ()을 사용하여 예외를 던지고 트랜잭션을 롤백합니다 ( $ mysqli-> rollback () ).

  5. 커밋 거래 : 모든 쿼리에 오류가 없으면 거래를 커밋하기 위해 $ mysqli-> commit ()를 호출합니다.

  6. 연결을 닫으십시오 : 마지막으로 $ mysqli-> close ()를 사용하여 데이터베이스 연결을 닫으십시오.

mysqli :: $ errno를 사용하여 오류의 원인을 찾는 방법

위의 코드에서 $ mysqli-> errno는 주로 쿼리가 성공적으로 실행되는지 여부를 결정하는 데 사용됩니다. 쿼리가 실패하면 $ mysqli-> errno는 0이 아닌 오류 코드를 반환하고 $ mysqli-> error는 특정 오류 설명 정보를 반환합니다. 이 정보를 통해 문제를 신속하게 찾을 수 있습니다.

  • $ mysqli-> errno0 이면 오류가 발생하지 않았습니다.

  • $ mysqli-> errno가 0이 아닌 값이라면 오류가 발생했음을 의미합니다. $ mysqli-> 오류를 사용하여 특정 오류 정보를 볼 수 있습니다.

예를 들어, 삽입 쿼리를 실행할 때 삽입이 실패하게 된 테이블에 이미 중복 데이터가있는 경우 MySQL은 오류 코드 1062 (중복 키 오류를 나타냄)를 반환합니다. 현재 $ mysqli-> errno는 1062를 반환하고 $ mysqli-> error는 "기본 '의 경우'user1 'Duplication'user1 '과 같은 오류 메시지를 반환합니다.

일반적인 MySQL 오류 코드

  • 1062- 입력 오류 반복 (예 : 1 차 키 복제)

  • 1046- 데이터베이스를 선택하지 않았습니다

  • 1146- 테이블이 존재하지 않습니다

  • 2002- MySQL 서버에 연결하는 데 실패했습니다

$ mysqli-> errno$ mysqli-> 오류를 통해 오류의 원인을 효과적으로 찾아 적시에 해당 조치를 취할 수 있습니다.

요약

트랜잭션 컨트롤에 mysqli_autocommit ()를 사용하는 경우 mysqli :: $ errnomysqli :: $ 오류는 커밋 문제를 겪을 때 매우 유용한 디버깅 도구입니다. 그들은 개발자가 오류의 원인을 신속하게 찾을 수 있도록 도와 주어 문제를보다 효율적으로 디버깅하고 해결할 수 있습니다. 실제 개발 프로세스 중에는 데이터베이스 작업의 신뢰성과 안정성을 보장하기 위해 거래 및 오류 처리 메커니즘을 합리적으로 사용해야합니다.