PHP에서 MySQLI_AUTOCIMMIT () 함수는 자동으로 트랜잭션을 자동으로 커밋하는 기능을 활성화 또는 비활성화하는 데 사용됩니다. 기본적으로 MySQL은 각 쿼리가 실행 된 후 자동으로 트랜잭션을 저장합니다. 그러나 경우에 따라 개발자는 여러 쿼리가 실행될 때 트랜잭션 일관성이 유지되도록 자동 커밋 기능을 끄야 할 수도 있습니다. 이 경우 개발자는 트랜잭션을 커밋하거나 롤백하려면 Commit () 또는 Rollback ()을 수동으로 호출해야합니다.
그러나 때때로 우리는 특히 mysqli_autocommit ()를 사용할 때 거래를 저지르는 데 문제가 있습니다. 이러한 문제를 찾기 위해 MySQLI :: $ errno 및 mySQLI :: $ 오류 의 두 속성이 특히 중요합니다. mysqli :: $ errno는 mySQL 작업에 대한 오류 코드를 얻는 데 도움이 될 수있는 반면 mysqli :: $ 오류는 오류 정보를 제공합니다. 이 두 가지 속성을 결합하여 개발자는 쉽게 디버깅하고 문제를 찾을 수 있습니다.
먼저 기본 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();
?>
데이터베이스에 연결 : 먼저 New MySQLI ()를 통해 데이터베이스 연결을 만들어 MySQL 서버에 연결했습니다. 연결이 실패하면 $ mysqli-> connect_error를 통해 오류 메시지를 받고 프로그램을 종료하십시오.
자동 커밋 끄기 : $ mysqli-> autocommit (false)을 사용하여 자동 커밋 모드를 끄십시오. 이는 각 쿼리 직후에 거래가 제출되지 않고 대신 Commit ()에게 Commit () 을 Commit을 요구하는 수동 전화가 필요하다는 것을 의미합니다.
트랜잭션 실행 : $ mysqli-> begin_transaction () 을 통해 트랜잭션을 시작하고 $ mysqli-> query () 를 통해 삽입 작업을 수행합니다. 쿼리 오류가 발생하면 $ mysqli-> errno는 오류 코드를 반환하고 $ mysqli-> 오류가 오류 설명을 반환합니다.
오류 처리 : 쿼리를 실행할 때 오류가 발생하면 if ($ mysqli-> errno) 로 오류를 판단하고 포착합니다. 오류가 발생하면 Throw New Exception ()을 사용하여 예외를 던지고 트랜잭션을 롤백합니다 ( $ mysqli-> rollback () ).
커밋 거래 : 모든 쿼리에 오류가 없으면 거래를 커밋하기 위해 $ mysqli-> commit ()를 호출합니다.
연결을 닫으십시오 : 마지막으로 $ mysqli-> close ()를 사용하여 데이터베이스 연결을 닫으십시오.
위의 코드에서 $ mysqli-> errno는 주로 쿼리가 성공적으로 실행되는지 여부를 결정하는 데 사용됩니다. 쿼리가 실패하면 $ mysqli-> errno는 0이 아닌 오류 코드를 반환하고 $ mysqli-> error는 특정 오류 설명 정보를 반환합니다. 이 정보를 통해 문제를 신속하게 찾을 수 있습니다.
$ mysqli-> errno 가 0 이면 오류가 발생하지 않았습니다.
$ mysqli-> errno가 0이 아닌 값이라면 오류가 발생했음을 의미합니다. $ mysqli-> 오류를 사용하여 특정 오류 정보를 볼 수 있습니다.
예를 들어, 삽입 쿼리를 실행할 때 삽입이 실패하게 된 테이블에 이미 중복 데이터가있는 경우 MySQL은 오류 코드 1062 (중복 키 오류를 나타냄)를 반환합니다. 현재 $ mysqli-> errno는 1062를 반환하고 $ mysqli-> error는 "기본 '의 경우'user1 'Duplication'user1 '과 같은 오류 메시지를 반환합니다.
1062- 입력 오류 반복 (예 : 1 차 키 복제)
1046- 데이터베이스를 선택하지 않았습니다
1146- 테이블이 존재하지 않습니다
2002- MySQL 서버에 연결하는 데 실패했습니다
$ mysqli-> errno 및 $ mysqli-> 오류를 통해 오류의 원인을 효과적으로 찾아 적시에 해당 조치를 취할 수 있습니다.
요약
트랜잭션 컨트롤에 mysqli_autocommit ()를 사용하는 경우 mysqli :: $ errno 및 mysqli :: $ 오류는 커밋 문제를 겪을 때 매우 유용한 디버깅 도구입니다. 그들은 개발자가 오류의 원인을 신속하게 찾을 수 있도록 도와 주어 문제를보다 효율적으로 디버깅하고 해결할 수 있습니다. 실제 개발 프로세스 중에는 데이터베이스 작업의 신뢰성과 안정성을 보장하기 위해 거래 및 오류 처리 메커니즘을 합리적으로 사용해야합니다.