PHP에서 데이터베이스 작업에 MySQLI Extension을 사용할 때 SQL 쿼리는 일반적으로 mysqli_query ()를 사용하여 수행되며 쿼리 결과는 mysqli_result 객체를 통해 얻습니다. mysqli_result 객체는 쿼리 결과 세트를 나타내는 데 사용되며,이를 통해 fetch_assoc () , fetch_row () 등과 같은 메소드를 통해 데이터 를 얻을 수 있습니다.
mysqli_result 객체의 수명주기는 쿼리 실행 및 결과 획득과 밀접한 관련이 있습니다. 일반적으로 MySQLI_RESULT 객체는 다음과 같은 경우에 실패합니다.
쿼리를 실행할 때 SQL 문에 구문 오류가 발생하거나 쿼리가 실패하는 다른 이유가 있으면 mysqli_query ()가 거짓을 반환하고 mysqli_result 객체는 현재 생성되지 않습니다. 따라서이 유효하지 않은 객체를 작동하려는 시도는 오류가 발생합니다.
쿼리가 비어있는 결과를 반환하면 (예 : Select Query가 일치하는 데이터를 찾지 못했습니다) MySQLI_RESULT 객체는 여전히 생성되지만 데이터는 포함되지 않습니다. 이 경우 Fetch _*() 메소드를 호출하면 결과가 Null 또는 False가 되어 페치 할 수있는 데이터가 없음을 나타냅니다.
mysqli_result 객체는 쿼리 결과 세트를 기반으로합니다. 이 객체는 모든 결과를 가로 질러 다른 작업을 수행하지 않으면 파괴됩니다. 쿼리가 실행되고 데이터가 처리되면 mysqli_result 객체가 자동으로 만료됩니다.
쿼리 결과 세트가 매우 크고 데이터 양이 메모리 제한을 초과하면 메모리 제한으로 인해 MySQLI_Result 객체도 유효하지 않을 수 있습니다. 현재 "메모리 오버플로"오류가 나타나고 쿼리 작업이 실패하여 False가 반환됩니다.
쿼리 실패는 mysqli_result 객체를 생성 할 수 없게 만들뿐만 아니라 일련의 결과를 초래할 수 있습니다.
가장 직접적인 결과는 데이터를 얻을 수 없다는 것입니다. 예를 들어, 선택 쿼리를 수행 할 때 쿼리가 실패하면 예상 결과 세트를 얻을 수 없으며 데이터를 추가 처리 할 방법이 없습니다.
데이터베이스 작업에서 쿼리 실패는 후속 작업이 실행되는 것을 방지합니다. 예를 들어, 쿼리가 실패한 결과를 반환하면 실패한 쿼리를 기준으로 데이터 삽입, 업데이트 또는 삭제를 시도하면 오류가 발생할 수 있습니다.
쿼리 실패의 경우 적절한 오류 처리 메커니즘없이 프로그램은 동일한 실패 쿼리를 반복적으로 시도하여 많은 리소스를 낭비하고 성능 저하를 초래할 수 있습니다.
쿼리가 효과적으로 캡처되고 처리되지 않으면 오류 정보가 누출되어 공격자가 데이터베이스의 구조 또는 기타 민감한 정보를 이해하는 데 도움이 될 수 있습니다. 이는 생산 환경에서 특히 위험하므로 개발자는 쿼리 오류가 올바르게 처리되도록해야합니다.
데이터베이스 쿼리 및 결과 세트 처리의 원활한 진행 상황을 보장하려면 다음에주의를 기울여야합니다.
mysqli_query () 를 각각 실행 한 후에는 쿼리가 성공했는지 확인하기 위해 반환 값이 False 인지 확인해야합니다. 샘플 코드는 다음과 같습니다.
$conn = mysqli_connect('localhost', 'username', 'password', 'database');
$query = "SELECT * FROM users";
$result = mysqli_query($conn, $query);
if (!$result) {
die('쿼리가 실패했습니다: ' . mysqli_error($conn));
}
// 쿼리 결과를 계속 처리하십시오
while ($row = mysqli_fetch_assoc($result)) {
echo $row['name'];
}
mysqli_free_result($result);
mysqli_close($conn);
PHP 5 이상은 예외 처리를 지원하고 쿼리 실패는 시험 캐치 블록에서 데이터베이스 작업을 캡슐화하여보다 우아하게 처리 할 수 있습니다.
try {
$conn = new mysqli('localhost', 'username', 'password', 'database');
if ($conn->connect_error) {
throw new Exception("연결이 실패했습니다: " . $conn->connect_error);
}
$result = $conn->query("SELECT * FROM users");
if (!$result) {
throw new Exception("쿼리가 실패했습니다: " . $conn->error);
}
while ($row = $result->fetch_assoc()) {
echo $row['name'];
}
$result->free();
$conn->close();
} catch (Exception $e) {
echo '실수: ' . $e->getMessage();
}
쿼리 결과를 처리 할 때는 빈 개체에 액세스하여 오류를 피하기 위해 비어 있는지 합리적으로 판단해야합니다.
$result = mysqli_query($conn, "SELECT * FROM users");
if (mysqli_num_rows($result) > 0) {
while ($row = mysqli_fetch_assoc($result)) {
echo $row['name'];
}
} else {
echo "기록이 없습니다";
}
mysqli_free_result($result);
위의 방법을 통해 쿼리의 안정성을 보장하고 MySQLI_RESULT 객체가 실패하지 않도록하며 쿼리 실패의 부정적인 결과를 피할 수 있습니다. 오류 처리 및 결과 확인은 데이터베이스 작업의 안정성 및 보안을 보장하는 핵심 링크입니다.