MySQLI Extension을 사용하여 PHP의 데이터베이스에 연결하는 경우 MySQLI_RESULT 객체의 Fetch_Assoc () 메소드는 쿼리 결과 세트에서 다음 레코드 행을 얻는 데 사용됩니다. 이 메소드는 열 이름을 포함하는 연관 배열을 키 이름으로, 해당 데이터를 값으로 반환합니다. 더 이상 반환 할 레코드가 없으면 fetch_assoc ()는 null을 반환합니다. 그러나 많은 개발자가 사용 중에 문제가 발생합니다. 쿼리에 오류가없는 것처럼 보이지만 Fetch_assoc ()는 여전히 NULL을 반환합니다. 이 기사는이 문제의 원인을 탐색하고 해결책을 제공합니다.
mysqli_result 와 함께 null을 반환하기 위해 fetch_assoc ()가 호출되면 몇 가지 가능한 이유가 있습니다.
가장 일반적인 경우는 실행 된 쿼리가 데이터를 반환하지 않는다는 것입니다. 예를 들어, 선택 쿼리를 실행하지만 기준을 충족하는 데이터베이스에 레코드가 없으면 fetch_assoc () 는 null을 반환합니다. 이것은 오류가 아니라 정상적인 동작이며 더 이상 반환 할 데이터가 없음을 나타냅니다.
$query = "SELECT * FROM users WHERE id = 10"; // 가정 id = 10 존재하지 않습니다
$result = $mysqli->query($query);
$row = $result->fetch_assoc();
if ($row === null) {
echo "기록이 없습니다!";
}
SQL 쿼리 문 자체에 오류가 있으면 mysqli_query ()가 false를 반환하고 mysqli_result가 생성되지 않습니다. 쿼리 결과가 성공적으로 실행되는지 확인하지 않으면 쿼리 실행이 성공적이라고 잘못 생각할 수 있지만 실제로는 유효한 결과를 반환하지 않습니다.
$query = "SELEC * FROM users WHERE id = 10"; // SQL 구문 오류
$result = $mysqli->query($query);
if ($result === false) {
echo "쿼리가 실패했습니다: " . $mysqli->error;
}
fetch_assoc ()가 호출되면 결과 세트의 데이터가 완전히 추출되면 후속 Fetch_assoc () 호출은 NULL을 반환하므로 쿼리에 더 이상 리턴 할 데이터가 없음을 의미합니다.
$query = "SELECT * FROM users";
$result = $mysqli->query($query);
while ($row = $result->fetch_assoc()) {
echo $row['name'] . "<br>";
}
// 여기서 다시 호출되었습니다 fetch_assoc() 돌아올 것입니다 null
$row = $result->fetch_assoc();
if ($row === null) {
echo "더 이상 데이터가 없습니다!";
}
쿼리 중에 데이터베이스 연결 오류 또는 기타 문제가 발생하면 MySQLI_Result 객체가 데이터를 올바르게 반환하지 않을 수 있습니다. 현재 MySQLI 의 오류 메시지를 확인하여 문제를 디버그하고 해결할 수 있습니다.
$mysqli = new mysqli('localhost', 'root', 'password', 'database');
if ($mysqli->connect_error) {
die('연결이 실패했습니다: ' . $mysqli->connect_error);
}
$query = "SELECT * FROM users";
$result = $mysqli->query($query);
if ($result === false) {
echo "쿼리가 실패했습니다: " . $mysqli->error;
}
먼저, 실행 된 쿼리가 유효한 결과를 반환하는지 확인하십시오. 쿼리가 성공했는지 확인하여 불필요한 오류를 피할 수 있습니다.
$query = "SELECT * FROM users WHERE id = 10";
$result = $mysqli->query($query);
if ($result === false) {
echo "쿼리가 실패했습니다: " . $mysqli->error;
} else {
$row = $result->fetch_assoc();
if ($row) {
echo "기록을 찾으십시오: " . $row['name'];
} else {
echo "기록이 없습니다!";
}
}
SQL 문에 오류가 없는지 확인하십시오. 자세한 오류 정보는 mysqli_error () 또는 mysqli_errno () 함수를 사용하여 얻을 수 있습니다.
$query = "SELECT * FROM users WHERE id = 10";
$result = $mysqli->query($query);
if ($result === false) {
echo "쿼리가 실패했습니다: " . $mysqli->error;
}
데이터베이스 연결에 문제가 없는지 확인하십시오. 연결 오류는 종종 쿼리 실패의 일반적인 원인 중 하나입니다.
$mysqli = new mysqli('localhost', 'root', 'password', 'database');
if ($mysqli->connect_error) {
die('연결이 실패했습니다: ' . $mysqli->connect_error);
}
디버깅 과정에서 var_dump () 또는 print_r () 과 같은 함수를 사용하여 결과 세트의 내용을 출력하여 반환 된 결과를 확인하는 데 도움이 될 수 있습니다.
$query = "SELECT * FROM users";
$result = $mysqli->query($query);
var_dump($result); // 쿼리 결과 객체를 확인하십시오
mysqli_result 의 fetch_assoc () 메소드는 반드시 null을 반환하는 데 잘못된 것은 아닙니다. 쿼리 결과 세트의 정상 상태이며, 더 이상 추출 할 수있는 데이터가 없음을 나타냅니다. 이 동작은 쿼리가 결과를 반환하는지, SQL이 올바르게 실행되는지, 데이터베이스 연결이 정상인지 여부를 신중하게 확인함으로써 피할 수 있습니다. 이 기사의 분석 및 솔루션 이이 문제를 더 잘 이해하고 해결하는 데 도움이되기를 바랍니다.