PHP 개발에서 mysqli :: $ errno 및 mysqli :: $ 오류 속성은 데이터베이스 작업에 MySQLI를 사용할 때 중요한 역할을합니다. mysqli :: $ errno는 현재 연결에 대한 오류 코드를 가져 오는 데 사용되며 mysqli :: $ 오류는 오류 정보를 얻는 데 사용됩니다. 개발자는 종종이 문제에 직면합니다. 여러 데이터베이스 연결 인스턴스에서 mysqli :: $ errno 의 값은 공유됩니까? 공유되면 다른 연결 사이의 오류 상태를 어떻게 피할 수 있습니까? 이 기사는이 문제를 깊이 분석하고 오류 상태의 오염을 피하기위한 몇 가지 솔루션을 제공합니다.
mysqli :: $ errno는 현재 데이터베이스 연결과 관련된 오류 코드를 보유하는 MySQLI 객체의 인스턴스 속성입니다. 정상적인 경우, mysqli :: $ errno 의 역할은 현재 데이터베이스 연결 인스턴스에서 오류 상태를 기록하는 것입니다.
mysqli :: $ errno 는 공유되지 않습니다 . 즉, 각 MySQLI 연결 인스턴스에는 고유 한 Errno 상태가 있습니다. 각각의 독립적 인 데이터베이스 연결은 독립적으로 자체 오류 코드를 유지하므로 다른 연결 인스턴스 간의 errnos는 서로 오염되지 않습니다.
그러나 동일한 MySQLI 객체를 통해 여러 연결 인스턴스가 생성되면 오류 상태가 서로 방해 할 수 있습니다. 특히 여러 데이터베이스 연결을 사용하고 MySQLI 객체를 공유 할 때는 일관되지 않은 오류 메시지를 피하기 위해 각 연결의 오류 상태를 관리하는 것이 좋습니다.
문제는 주로 다음 상황에서 발생합니다.
동일한 데이터베이스 연결 공유 : 여러 작업이 동일한 데이터베이스 연결 객체 (즉, 동일한 MySQLI 인스턴스)를 공유하는 경우 마지막 작업에 의해 오류 상태 ( ERRNO )가 덮어 쓰고 이전 작업의 오류 메시지가 손실됩니다.
동일한 MySQLI 인스턴스를 재사용하십시오 . 다른 장소에서 동일한 MySQLI 인스턴스를 반복적으로 사용하고 오류 상태를 재설정하지 않으면 오류 메시지가 혼동 될 수 있으며 후속 작업에 영향을 줄 수 있습니다.
여러 연결된 인스턴스 간의 상호 오염을 피하기 위해 다음 방법을 사용할 수 있습니다.
가장 쉬운 방법은 각 데이터베이스 연결이 별도의 MySQLI 인스턴스를 사용하는지 확인하는 것입니다. 이러한 방식으로, 각 연결에는 고유 한 errno 및 오류 상태가 있으며 서로 영향을 미치지 않습니다.
// 첫 번째 데이터베이스 연결을 만듭니다
$mysqli1 = new mysqli("localhost", "user1", "password1", "database1");
if ($mysqli1->connect_errno) {
echo "연결이 실패했습니다: " . $mysqli1->connect_error;
}
// 두 번째 데이터베이스 연결을 만듭니다
$mysqli2 = new mysqli("localhost", "user2", "password2", "database2");
if ($mysqli2->connect_errno) {
echo "연결이 실패했습니다: " . $mysqli2->connect_error;
}
MySQLI 클래스는 Reset_Error 메소드를 제공하며 연결의 오류 상태를 수동으로 재설정하는 데 사용할 수 있습니다. 각 데이터베이스 작업 후에는이 방법을 호출하여 잘못된 정보 오염을 피하기 위해 Errno 및 오류를 지우십시오.
// 데이터베이스 작업을 수행합니다
$result = $mysqli->query("SELECT * FROM users");
if (!$result) {
echo "쿼리가 실패했습니다: " . $mysqli->error;
}
// 오류 상태를 재설정합니다
$mysqli->reset_error();
응용 프로그램이 여러 데이터베이스와 상호 작용 해야하는 경우 다른 연결 구성을 사용하여 독립적 인 연결 인스턴스를 작성하십시오. 다른 호스트 이름, 사용자 이름, 비밀번호 등을 구성하면 각 연결 인스턴스가 다른 구성에서 실행되고 서로를 방해하지 않도록 할 수 있습니다.
// 예외 처리를 사용하여 오류를 잡으십시오
try {
$mysqli->query("SELECT * FROM non_existing_table");
} catch (Exception $e) {
echo "数据库쿼리가 실패했습니다: " . $e->getMessage();
$mysqli->reset_error();
}