PHP에서 MySQLI 확장자를 사용하면 MySQL 데이터베이스와 상호 작용하는 데 도움이 될 수 있습니다. 여기서 MySQLI_STMT :: $ 오류는 전처리 문과 관련된 오류 정보를 얻는 데 사용할 수있는 매우 유용한 기능입니다. 데이터베이스 작업을 수행 할 때 오류는 특히 다단계 작업에서 데이터 불일치가 발생할 수 있습니다. 작업의 신뢰성을 보장하기 위해 트랜잭션 관리 기능과 함께 MySQLI_STMT :: $ 오류 함수를 사용하여 오류를 처리하고 오류가 발생할 때 롤백하여 데이터의 일관성 및 무결성을 보장 할 수 있습니다.
MySQLI_STMT :: $ ERROR는 최근 실행 된 전처리 명령문과 관련된 오류 정보를 반환하는 MySQLI_STMT 클래스의 속성입니다. 이 속성은 SQL 문의 정확성을 디버깅하고 보장하는 데 매우 중요합니다. 오류 메시지가 포함 된 문자열을 반환하고 오류가 발생하지 않으면 빈 문자열이 발생합니다.
거래는 성공하거나 실패하는 운영 모음입니다. MySQL의 트랜잭션 관리를 통해 여러 작업을 수행 할 때 중간에 오류가 발생하더라도 수술 전 상태로 복원 할 수 있습니다. 트랜잭션에서 여러 운영을 수행함으로써 데이터의 일관성과 무결성을 보장 할 수 있습니다.
MySQL에서는 다음과 같은 SQL 문을 통해 트랜잭션을 제어 할 수 있습니다.
트랜잭션 시작 또는 시작 : 거래를 시작합니다.
커밋 : 변경 사항이 영구적으로 이루어 지도록 거래를 제출하십시오.
롤백 : 거래를 롤백하고 거래의 모든 변경 사항을 취소합니다.
데이터베이스 작업을 수행 할 때, 특히 여러 단계의 데이터 업데이트가 관련 될 때 각 단계가 성공했는지 확인해야합니다. 이러한 단계 중 하나라도 실패하면 일부 데이터 업데이트를 성공적으로 피하기 위해 전체 트랜잭션을 롤백해야합니다. MySQLI_STMT :: $ 오류를 사용하여 SQL 문의 오류 메시지를 캡처하고 오류가 발생하면 트랜잭션을 롤백 할 수 있습니다.
다음은 mysqli_stmt :: $ 오류 함수를 트랜잭션 롤백과 결합하는 방법을 보여주는 간단한 예입니다.
<?php
// 데이터베이스 연결을 만듭니다
$mysqli = new mysqli("localhost", "username", "password", "database");
// 연결이 성공했는지 확인하십시오
if ($mysqli->connect_error) {
die("연결이 실패했습니다: " . $mysqli->connect_error);
}
// 거래를 시작하십시오
$mysqli->begin_transaction();
try {
// 첫 번째 쿼리 작업
$stmt = $mysqli->prepare("INSERT INTO users (username, email) VALUES (?, ?)");
$stmt->bind_param("ss", $username, $email);
$username = 'johndoe';
$email = '[email protected]';
$stmt->execute();
// 오류를 확인하십시오
if ($stmt->error) {
throw new Exception("쿼리를 실행하는 동안 오류가 발생했습니다: " . $stmt->error);
}
// 두 번째 쿼리 작업
$stmt = $mysqli->prepare("UPDATE accounts SET balance = balance - 100 WHERE user_id = ?");
$stmt->bind_param("i", $user_id);
$user_id = 1;
$stmt->execute();
// 오류를 확인하십시오
if ($stmt->error) {
throw new Exception("쿼리를 실행하는 동안 오류가 발생했습니다: " . $stmt->error);
}
// 거래를 제출하십시오
$mysqli->commit();
echo "운영이 성공적입니다!";
} catch (Exception $e) {
// 오류가 발생하는 경우,트랜잭션을 롤백하십시오
$mysqli->rollback();
echo "작동 실패: " . $e->getMessage();
}
// 연결을 닫으십시오
$mysqli->close();
?>
거래 시작 :
$ mysqli-> begin_transaction ()을 사용합니다. 거래를 시작합니다. 이렇게하면 동일한 트랜잭션 내에서 다음 데이터베이스 작업이됩니다.
데이터베이스 작업 수행 :
MySQLI 전처리 명령문을 사용하여 두 개의 데이터베이스 작업, 즉 하나의 삽입 작업 및 하나의 업데이트 작업을 수행하십시오. 각 작업 후에 오류가 발생했는지 확인합니다. 오류가 발생하면 새로운 예외를 통해 예외를 던지고 예외 처리에서 트랜잭션을 롤백합니다.
오류 확인 :
$ stmt-> 오류를 통해 SQL 실행이 수행 될 때 오류 메시지를 얻습니다. 오류가 발생하면 예외를 던지고 거래를 롤백합니다. 이러한 방식으로, 이전 작업과 후속 작업은 모두 데이터의 일관성을 보장하기 위해 취소 될 것입니다.
거래 롤백 :
작동 중에 예외가 발생하면 $ mysqli-> rollback () ;을 사용하여 트랜잭션을 롤백합니다. 이렇게하면 트랜잭션의 모든 변경 사항을 실행 취소하여 일부 데이터가 성공적으로 업데이트되는 것을 방지하는 반면 다른 데이터는 업데이트되지 않습니다.
거래 제출 :
모든 작업이 성공적으로 실행되면 $ mysqli-> commit ()를 사용하여 트랜잭션을 제출합니다. 변경 사항이 데이터베이스에 영구적으로 저장되도록합니다.
MySQLI_STMT :: $ 오류 함수 및 트랜잭션 롤백 메커니즘을 결합하여 데이터베이스 작업의 신뢰성을 보장 할 수 있습니다. 여러 데이터베이스 작업이 수행되면 한 번의 작업이 실패하면 데이터 불일치를 피하기 위해 트랜잭션을 롤백 할 수 있습니다. 이 방법은 코드의 견고성을 향상시킬뿐만 아니라 오류가 발생하면 데이터가 손상되지 않도록합니다. 개발에서 일반적인 오류 처리 모드입니다.