PHP에서 Fetch_all () 함수는 일반적으로 MySQLI Extension 라이브러리의 일부인 데이터베이스 쿼리의 모든 결과를 얻는 데 사용됩니다. 이 기능을 사용하는 경우 쿼리 데이터가 필요에 따라 처리되도록 반환 된 결과 세트 유형을 설정할 수 있습니다. 가장 일반적인 두 가지 결과 세트 패턴은 MySQLI_Assoc 과 MySQLI_NUM 입니다.이 두 패턴의 차이점은 데이터베이스의 행을 PHP 배열로 변환하는 방법입니다.
fetch_all () 함수의 결과 세트 모드를 mysqli_assoc 로 설정하면 결과는 배열의 키가 필드 이름 인 연관 배열을 반환합니다. 예를 들어, 사용자 데이터가 포함 된 테이블이 있다고 가정하면 쿼리 결과는 다음과 같습니다.
SELECT id, username, email FROM users;
mysqli_assoc 모드를 사용하면 반환 된 데이터 형식은 다음과 같습니다.
Array(
[0] => Array(
[id] => 1,
[username] => john_doe,
[email] => john@example.com
),
[1] => Array(
[id] => 2,
[username] => jane_smith,
[email] => jane@example.com
)
)
이 모드에서는 데이터가 열의 필드 이름으로 구성되며 필드 이름을 통해 각 열의 데이터에 액세스 할 수 있습니다. 예를 들어:
echo $result[0]['username']; // 산출 john_doe
결과 세트가 숫자 인덱스 배열이 되려면 MySQLI_NUM 모드를 사용하도록 선택할 수 있습니다. 이 패턴은 각 데이터 행을 숫자로 인덱싱 된 배열로 변환하며, 여기서 배열의 인덱스 값은 데이터베이스 열의 위치에 해당합니다. 예를 들어, MySQLI_NUM 모드를 사용하여 위의 사용자 테이블을 쿼리 할 때 결과는 다음과 같습니다.
Array(
[0] => Array(
[0] => 1,
[1] => john_doe,
[2] => john@example.com
),
[1] => Array(
[0] => 2,
[1] => jane_smith,
[2] => jane@example.com
)
)
이 모드에서는 데이터가 열 순서로 배열되며 인덱스는 0 부터 시작됩니다. 예를 들어 배열의 숫자 색인을 통해 데이터에 액세스 할 수 있습니다.
echo $result[0][1]; // 산출 john_doe
fetch_all () 함수의 두 번째 매개 변수는 mysqli_assoc 또는 mysqli_num 일 수있는 결과 세트의 스키마를 지정하는 데 사용됩니다. 연관 배열 (필드 이름으로 키)을 사용하려면 두 번째 매개 변수를 mysqli_assoc 로 설정하십시오. 숫자 인덱스 배열 (열의 위치가 인덱스로 사용됨)을 사용하려면 두 번째 매개 변수를 MySQLI_NUM 으로 설정하십시오.
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
$query = "SELECT id, username, email FROM users";
$result = $mysqli->query($query);
// AS를 설정합니다 MYSQLI_ASSOC
$assoc_result = $result->fetch_all(MYSQLI_ASSOC);
print_r($assoc_result);
// AS를 설정합니다 MYSQLI_NUM
$num_result = $result->fetch_all(MYSQLI_NUM);
print_r($num_result);
$mysqli->close();
?>
mysqli_assoc 또는 mysqli_num 모드를 선택하는 것은 데이터 액세스 요구에 따라 다릅니다.
필드 이름으로 데이터를 참조하는 데 더 익숙하고 결과를 더 읽기 쉬우려면 mysqli_assoc을 사용하십시오.
더 많은 메모리 절약 방식이 필요하거나 필드 이름이 아닌 데이터 순서에 관심이있는 경우 mysqli_num을 사용하는 것이 더 적절할 수 있습니다.
실제 개발에서는 웹 페이지에 데이터를 출력하고 URL을 포함 해야하는 시나리오를 만나게 될 수 있습니다. URL을 구성하여 데이터베이스 필드를 동적으로 포함시킬 수있는 링크를 생성한다고 가정합니다. 예를 들어, 사용자 양식이 각 사용자의 개인 페이지 URL이 포함 된 경우 다음과 같이 쓸 수 있습니다.
$domain = "http://m66.net/profile/";
$user_id = $result[0]['id'];
$user_url = $domain . $user_id;
echo "<a href='$user_url'>Visit Profile</a>";
이렇게하면 각 사용자의 개인 페이지에 대한 링크를 생성 할 수 있습니다.
Fetch_all () 함수는 쿼리 결과 세트를 처리 할 때 매우 유용한 도구입니다. mysqli_assoc 또는 mysqli_num 모드를 올바르게 선택하면 데이터에 쉽게 액세스하고 처리 할 수 있습니다. 적절한 결과 세트 패턴을 선택하면 코드가 더 간결하고 이해하기 쉽고 유지 관리 할 수 있습니다.