MySQL 데이터베이스 사용은 PHP 응용 프로그램을 개발할 때 일반적인 작업입니다. PHP에서는 MySQL 데이터베이스와 상호 작용하기 위해 종종 MySQLI 클래스를 사용합니다. MySQLI를 사용하면 데이터베이스 쿼리를 쉽게 수행하고 결과를 얻고 다른 데이터베이스 작업을 수행 할 수 있습니다. 그러나 실제로 데이터베이스 조작 코드를 작성할 때 일부 세부 사항을 무시하여 특정 상황에서 코드가 잘못 될 수 있습니다.
그중에서도 일반적인 문제는 mysqli :: $ errno 속성에 액세스하기 전에 데이터베이스 연결이 성공했는지 확인하는 것을 잊어 버린다는 것입니다. 연결이 성공적으로 점검되지 않으면 어떤 문제가 발생할 것인지 살펴 보겠습니다.
mysqli :: $ errno는 mysqli를 사용하여 데이터베이스 작업을 수행 할 때 매우 유용한 속성입니다. 이전 데이터베이스 작업의 오류 코드를 나타냅니다. 쿼리 또는 삽입과 같은 작업을 수행 할 때 오류가 발생하면 Errno는 오류 유형을 나타내는 정수 값을 반환합니다. 오류가 발생하지 않으면 그 값은 0이됩니다.
예를 들어:
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
echo "연결이 실패했습니다: " . $mysqli->connect_error;
exit();
}
$query = "SELECT * FROM table";
$result = $mysqli->query($query);
if ($mysqli->errno) {
echo "쿼리 오류: " . $mysqli->errno . " - " . $mysqli->error;
}
위의 예에서 $ mysqli-> errno는 오류 코드를 가져 와서 처리하는 데 사용됩니다.
일반적으로 Connect_Error 속성에 의해 판단하기 위해 각 데이터베이스가 작동하기 전에 데이터베이스 연결이 성공했는지 확인합니다. 데이터베이스 연결에 실패하지만 연결 상태를 확인하고 쿼리 작업을 직접 수행하지 않으면 심각한 오류가 발생합니다.
다음 코드를 고려하십시오.
$mysqli = new mysqli("localhost", "user", "password", "database");
$query = "SELECT * FROM table";
$result = $mysqli->query($query);
if ($mysqli->errno) {
echo "쿼리 오류: " . $mysqli->errno . " - " . $mysqli->error;
}
이 예에서는 MySQLI가 데이터베이스에 성공적으로 연결되어 있는지 여부를 결정하지 않습니다. 데이터베이스 연결이 실패하면 $ mysqli-> query ()가 실행되지 않으며 $ mysqli-> errno 에는 올바른 오류 메시지가 포함되지 않으므로 0 또는 다른 관련없는 값을 반환 할 수있어 문제를 정확하게 찾을 수 없습니다.
특히 다음은 발생할 수있는 문제입니다.
쿼리를 실행하기 전에 연결이 성공을 확인하지 않으면 프로그램이 계속 실행되어 잘못된 errno 값이 발생할 수 있습니다. 예를 들어, 데이터베이스 연결에 실패하면 오류 코드는 연결 고장의 실제 상황을 반영하지 않고 쿼리 작동의 오류를 반영하여 개발자의 디버깅 프로세스를 난독 화 할 수 있습니다.
연결이 실패한시기를 확인하지 않으면 프로그램에 명확한 오류 메시지가 표시되지 않아 문제를 빨리 발견 할 수 없습니다. 예를 들어, 연결 오류가 무시 될 수 있고 다른 관련없는 오류가 발생할 때까지 프로그램이 일반 쿼리처럼 계속 실행됩니다. 이 상황은 종종 개발자가 일련의 연쇄 반응에서 자신을 잃게하여 실제 오류의 실제 소스를 찾기가 어렵게 만듭니다.
경우에 따라 연결 상태가 먼저 확인되지 않으면 오류 메시지가 데이터베이스와 관련된 민감한 정보를 보여줄 수 있습니다. 예를 들어, 오류 메시지에는 데이터베이스 연결 문자열 또는 기타 민감한 데이터가 포함될 수 있습니다. 오류 처리 방법을 통해 공격자는 시스템 구조에 대한 정보를 얻을 수있는 기회를 가질 수 있으며, 이는 보안 취약점의 출현으로 이어질 수도 있습니다.
위의 문제를 피하기 위해 데이터베이스 작업을 수행하기 전에 연결이 성공했는지 확인해야합니다. 다음은 올바른 코드 예입니다.
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
die("연결이 실패했습니다: " . $mysqli->connect_error);
}
$query = "SELECT * FROM table";
$result = $mysqli->query($query);
if ($mysqli->errno) {
echo "쿼리 오류: " . $mysqli->errno . " - " . $mysqli->error;
}
이 코드에서는 먼저 Connect_Error가 비어 있는지 확인하여 데이터베이스 연결이 성공했는지 여부를 확인합니다. 연결이 실패하면 프로그램이 조기에 종료되고 오류 메시지가 표시됩니다. 연결이 성공하면 쿼리 작업이 계속되고 쿼리시 $ mysqli-> errno를 올바르게 사용하여 오류를 확인하십시오.
데이터베이스 작업을 수행하기 전에 연결이 성공했는지 확인하는 것을 잊어 버리면 잘못된 오류 코드, 숨겨진 연결 오류 및 잠재적 보안 문제와 같은 여러 가지 문제가 발생할 수 있습니다. 이러한 문제를 피하려면 먼저 각 데이터베이스 작동 전에 연결이 성공했는지 확인하십시오. 이를 통해 프로그램의 유지 관리 및 보안을 개선하면서 프로그램을보다 강력하고 오류 정보를보다 정확하게 만들 수 있습니다.
이 기사가 MySQLI :: $ errno를 사용하기 전에 연결이 성공했는지 여부를 먼저 결정 해야하는 이유를 이해 하고이 세부 사항을 무시하여 발생하는 문제를 피하십시오.