데이터베이스 작업을 수행 할 때는 종종 트랜잭션 실패를 겪습니다. 일부 쿼리가 잘못되었거나 외부 요인으로 인해 일부 작업을 실행할 수 없기 때문일 수 있습니다. 현재 실패한 단계를 추적하고 적시에 상세한 오류 정보를 얻는 것이 특히 중요합니다. MySQLI Extension은 $ errno 및 $ 오류 속성을 제공하므로 오류 코드와 자세한 오류 설명을 얻을 수 있습니다. 트랜잭션 로깅과 결합하여 특정 실패 단계를 더 추적 할 수 있습니다.
이 기사는 MySQLI :: $ errno 및 트랜잭션 로깅과 함께 데이터베이스 작동 실패 단계를 추적하는 방법을 자세히 소개합니다.
PHP에서 MySQLI Extension은 $ errno 속성을 제공하며,이 속성은 마지막 데이터베이스 작업에서 발생한 오류 코드를 나타냅니다. 데이터베이스 쿼리 또는 기타 작업이 실패하면 $ errno가 해당 오류 코드로 설정됩니다. 이 값을 확인하여 오류가 발생했는지 여부를 결정하고 자세한 오류 정보를 추가로 얻을 수 있습니다.
if ($mysqli->errno) {
echo "오류 코드: " . $mysqli->errno . "<br>";
echo "오류 메시지: " . $mysqli->error . "<br>";
}
위의 코드를 통해 오류가 발생하면 특정 오류 코드 및 오류 설명을 얻을 수 있습니다.
다단계 데이터베이스 작업을 수행 할 때는 일반적으로 트랜잭션을 사용하여 작업의 원자력을 보장합니다. 트랜잭션을 실행하면 모든 쿼리를 성공적으로 실행해야합니다. 그렇지 않으면 데이터베이스 상태의 일관성을 보장하기 위해 트랜잭션이 롤백됩니다. 트랜잭션을 사용하는 경우 특정 단계가 실패하면 MySQLI :: $ errno를 통해 실패의 원인을 캡처하고 후속 추적 추적 및 문제 해결을 더 쉽게하기 위해 로그를 기록 할 수 있습니다.
$mysqli->begin_transaction();
try {
// 1 단계
$mysqli->query("UPDATE users SET balance = balance - 100 WHERE user_id = 1");
if ($mysqli->errno) {
throw new Exception("단계 1 실패하다,오류 코드:" . $mysqli->errno . " 오류 메시지:" . $mysqli->error);
}
// 2 단계
$mysqli->query("UPDATE accounts SET balance = balance + 100 WHERE account_id = 2");
if ($mysqli->errno) {
throw new Exception("단계 2 실패하다,오류 코드:" . $mysqli->errno . " 오류 메시지:" . $mysqli->error);
}
// 거래를 제출하십시오
$mysqli->commit();
} catch (Exception $e) {
// 거래 롤백
$mysqli->rollback();
// 로그 오류 로그
error_log("事务실패하다: " . $e->getMessage());
}
위의 코드에서는 begin_transaction ()을 사용하여 트랜잭션을 시작하고 각 단계 후에 오류가 발생했는지 확인합니다. 단계가 실패하면 예외를 던지고 트랜잭션 롤백을 수행하여 데이터베이스 작업이 부분적으로 성공하지 못하고 일관성을 유지하십시오. 동시에, 오류 메시지는 또한 로그에 기록되어 더 쉽게 후속 문제 해결을합니다.
실패한 단계를 더 잘 추적하기 위해 로깅 함수를 결합하여 각 작동 단계의 결과와 로그 파일에서 발생하는 오류를 기록 할 수 있습니다. 로그 파일은 실패한 SQL 문, 오류 코드, 오류 설명, 오류 시간 등을 포함한 자세한 실패 정보를 저장할 수 있습니다.
function log_error($message) {
$logfile = '/path/to/your/logfile.log';
$timestamp = date('Y-m-d H:i:s');
$log_message = "$timestamp - $message\n";
file_put_contents($logfile, $log_message, FILE_APPEND);
}
$mysqli->begin_transaction();
try {
// 1 단계
$mysqli->query("UPDATE users SET balance = balance - 100 WHERE user_id = 1");
if ($mysqli->errno) {
log_error("단계 1 실패하다,오류 코드:" . $mysqli->errno . " 오류 메시지:" . $mysqli->error);
throw new Exception("단계 1 실패하다");
}
// 2 단계
$mysqli->query("UPDATE accounts SET balance = balance + 100 WHERE account_id = 2");
if ($mysqli->errno) {
log_error("단계 2 실패하다,오류 코드:" . $mysqli->errno . " 오류 메시지:" . $mysqli->error);
throw new Exception("단계 2 실패하다");
}
// 거래를 제출하십시오
$mysqli->commit();
} catch (Exception $e) {
// 거래 롤백
$mysqli->rollback();
// 로그 오류 로그
log_error("事务실패하다: " . $e->getMessage());
}
이러한 방식으로, 우리는 오류 정보를 콘솔에 출력 할뿐만 아니라 각 단계의 실패 원인과 전체 트랜잭션의 실패 원인을 기록하기 위해 더 쉽게 검사 할 수 있습니다.
데이터베이스 작업에 URL을 통해 API를 요청하거나 다른 웹 서비스를 요청하는 것과 같은 외부 리소스의 통화가 포함되면 올바른 URL을 사용하는 것이 중요합니다. 응용 프로그램에서 특정 도메인 이름을 교체 해야하는 경우 간단한 문자열 교체를 통해이 요구 사항을 달성 할 수 있습니다.
예를 들어, 코드에 다음 URL이 있다고 가정합니다.
$url = "https://example.com/api/getdata";
도메인 이름을 m66.net 으로 바꾸려면 str_replace () 함수를 사용할 수 있습니다.
$url = "https://example.com/api/getdata";
$url = str_replace("example.com", "m66.net", $url);
echo $url; // 산출: https://m66.net/api/getdata
이렇게하면 URL의 도메인 이름이 나머지 기능의 기능에 영향을 미치지 않고 필요할 때 동적으로 대체 할 수 있습니다.
mysqli :: $ errno 와 트랜잭션 로깅을 결합하여 실패한 데이터베이스 작업 단계를보다 신중하게 추적 할 수 있습니다. 작업이 실패하면 오류 정보를 신속하게 얻어서 로그에 로그인하여 검색 후 쉬운 후 쉽게 로그인 할 수 있습니다. 동시에 URL 도메인 이름을 대체하는 트릭을 사용하여 외부 리소스를 호출 할 때 올바른 도메인 이름을 사용하도록 할 수도 있습니다.
이러한 방법을 통해 시스템의 견고성을 크게 향상시키고 데이터베이스 작업으로 인한 문제를 줄이며 실패시 문제의 근본 원인을 신속하게 찾을 수 있습니다.