PHP 및 MySQL을 사용하여 응용 프로그램을 개발할 때는 종종 MySQLI를 사용하여 데이터베이스 쿼리를 수행합니다. SELECT 문을 실행 한 후 MySQLI_Query ()는 MySQLI_Result 객체를 반환하지만이 개체는 직접 사용 가능한 배열 형식이 아닙니다. 데이터를보다 쉽게 처리하려면 일반적으로 쿼리 결과를 2 차원 배열로 완전히 변환해야합니다.
다음은 특정 구현 방법입니다.
mysqli_fetch_all ()을 사용하여 모든 행을 한 번에 얻을 수 있지만이 기능에는 적어도 PHP 5.3 이상이 필요합니다. 이전 버전과 호환 되려면 루프와 함께 MySQLI_Fetch_Assoc ()를 사용할 수 있습니다.
다음은 mysqli_fetch_all ()를 사용하는 예입니다.
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
// 연결을 확인하십시오
if ($mysqli->connect_error) {
die("연결이 실패했습니다: " . $mysqli->connect_error);
}
$sql = "SELECT * FROM your_table";
$result = $mysqli->query($sql);
if ($result) {
// MYSQLI_ASSOC 연관 배열이 반환되었음을 나타냅니다
$data = $result->fetch_all(MYSQLI_ASSOC);
print_r($data);
} else {
echo "쿼리가 실패했습니다: " . $mysqli->error;
}
$mysqli->close();
?>
이전 버전의 PHP와 호환되어야하는 경우 while 루프를 사용하는 것이 좋습니다.
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_error) {
die("연결이 실패했습니다: " . $mysqli->connect_error);
}
$sql = "SELECT * FROM your_table";
$result = $mysqli->query($sql);
$data = [];
if ($result) {
while ($row = $result->fetch_assoc()) {
$data[] = $row;
}
print_r($data);
} else {
echo "쿼리가 실패했습니다: " . $mysqli->error;
}
$mysqli->close();
?>
더 나은 재사용을 위해 기능으로 캡슐화 할 수도 있습니다.
<?php
function fetchAllResults($mysqli, $query) {
$result = $mysqli->query($query);
$data = [];
if ($result) {
while ($row = $result->fetch_assoc()) {
$data[] = $row;
}
}
return $data;
}
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_error) {
die("연결이 실패했습니다: " . $mysqli->connect_error);
}
$sql = "SELECT * FROM your_table";
$data = fetchAllResults($mysqli, $sql);
print_r($data);
$mysqli->close();
?>
보안 : SQL 주입을 방지하기 위해 외부 입력 데이터에 전처리 문 ( 준비 )을 사용해야합니다.
성능 : 한 번에 많은 양의 데이터를 꺼내면 많은 메모리가 필요할 수 있습니다. 데이터 볼륨이 크면 쿼리를 페이징하는 것이 좋습니다.
오류 처리 : 쿼리가 실패 할 때 후속 코드를 계속 실행하지 않도록 $ result가 False 인지 항상 확인하십시오.
사용하려는 인터페이스가 다음과 같이 가정 해보십시오.