MySQL을 기반으로 PHP 응용 프로그램을 개발할 때는 데이터 프리젠 테이션의 쿼리 효율 및 사용자 경험을 향상시키기 위해 일반적으로 페이징 쿼리를 사용하여 세그먼트에 데이터를로드합니다. SQL을 직접 스 플라이 싱하는 방법을 사용하는 것과 비교하여 MySQLI_STMT :: 준비 기능을 사용하면 SQL 주입을 효과적으로 방지 할 수있을뿐만 아니라 코드의 가독성 및 유지 보수를 향상시킬 수 있습니다. 이 기사를 사용하면 MySQLI_STMT :: 예제를 준비하고 구문 분석하여 Pagination Query를 구현하는 방법에 대해 자세히 알아보십시오.
Pagination 쿼리의 핵심은 SQL의 한계 조항에 있으며 구문은 다음과 같습니다.
SELECT * FROM table_name LIMIT offset, page_size;
안에:
오프셋 : 오프셋, 읽을 레코드를 나타냅니다.
page_size : 페이지 당 표시되는 레코드 수입니다.
mysqli_stmt :: 준비 함수를 사용하는 경우, 한계 절의 매개 변수는 변수를 직접 바인딩 할 수 없으므로이 제한을 우회하기 위해 몇 가지 트릭을 사용해야합니다.
MySQLI 확장 및 전처리 문이 활성화되어 있는지 확인하십시오.
데이터베이스 연결이 설정되었습니다.
사용자 와 같은 쿼리를위한 데이터 테이블이 있습니다.
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_error) {
die("연결이 실패했습니다: " . $mysqli->connect_error);
}
?>
<?php
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$page_size = 10;
$offset = ($page - 1) * $page_size;
?>
한계 조항의 변수는 BIND_PARAM을 통해 구속 될 수 없으므로 문자열 스티칭을 통해서만 SQL을 구성 할 수 있습니다. 그러나 여전히 준비를 사용하여 다른 조건부 매개 변수를 바인딩 할 수 있습니다.
<?php
$sql = "SELECT id, name, email FROM users ORDER BY id DESC LIMIT ?, ?";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("ii", $offset, $page_size);
$stmt->execute();
$result = $stmt->get_result();
?>
<?php
while ($row = $result->fetch_assoc()) {
echo "<p>{$row['id']} - {$row['name']} - {$row['email']}</p>";
}
?>
총 레코드 수가 변수 $ total_rows 라고 가정하면 다음과 같은 방식으로 페이징 링크를 생성 할 수 있습니다.
<?php
$total_rows = 100; // 일반적으로 총 번호를 얻으려면 별도로 쿼리해야합니다.
$total_pages = ceil($total_rows / $page_size);
for ($i = 1; $i <= $total_pages; $i++) {
echo "<a href='https://gitbox.net/userlist.php?page=$i'>1. $i 페이지</a> ";
}
?>
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_error) {
die("연결이 실패했습니다: " . $mysqli->connect_error);
}
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$page_size = 10;
$offset = ($page - 1) * $page_size;
$sql = "SELECT id, name, email FROM users ORDER BY id DESC LIMIT ?, ?";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("ii", $offset, $page_size);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
echo "<p>{$row['id']} - {$row['name']} - {$row['email']}</p>";
}
$stmt->close();
$mysqli->close();
?>
MySQLI_STMT :: 준비를 사용하여 Pagination 쿼리를 구현하는 핵심은 SQL을 합리적으로 구성하고 매개 변수 바인딩의 한계를 이해하는 것입니다. 한계 매개 변수는 명명 된 자리 표시자를 사용할 수 없지만 Bind_Param을 사용하여 숫자 유형 매개 변수를 바인드하여 안전하고 신뢰할 수있는 페이징 기능을 달성 할 수 있습니다. 실제 프로젝트 에서이 방법은 기존 문자열 스 플라이 싱보다 안전하고 유지하기 쉽습니다. Page Navigation Logic과 결합하여 시스템의 사용자 경험 및 성능을 향상시키기 위해 완전한 페이징 데이터 디스플레이 시스템을 구축 할 수 있습니다.