현재 위치: > 최신 기사 목록> MySQLI_STMT :: PEAGINATION 쿼리를 구현할 준비를하십시오

MySQLI_STMT :: PEAGINATION 쿼리를 구현할 준비를하십시오

gitbox 2025-05-28

MySQL을 기반으로 PHP 응용 프로그램을 개발할 때는 데이터 프리젠 테이션의 쿼리 효율 및 사용자 경험을 향상시키기 위해 일반적으로 페이징 쿼리를 사용하여 세그먼트에 데이터를로드합니다. SQL을 직접 스 플라이 싱하는 방법을 사용하는 것과 비교하여 MySQLI_STMT :: 준비 기능을 사용하면 SQL 주입을 효과적으로 방지 할 수있을뿐만 아니라 코드의 가독성 및 유지 보수를 향상시킬 수 있습니다. 이 기사를 사용하면 MySQLI_STMT :: 예제를 준비하고 구문 분석하여 Pagination Query를 구현하는 방법에 대해 자세히 알아보십시오.

1. 기본 개념

Pagination 쿼리의 핵심은 SQL의 한계 조항에 있으며 구문은 다음과 같습니다.

 SELECT * FROM table_name LIMIT offset, page_size;

안에:

  • 오프셋 : 오프셋, 읽을 레코드를 나타냅니다.

  • page_size : 페이지 당 표시되는 레코드 수입니다.

mysqli_stmt :: 준비 함수를 사용하는 경우, 한계 절의 매개 변수는 변수를 직접 바인딩 할 수 없으므로이 제한을 우회하기 위해 몇 가지 트릭을 사용해야합니다.

2. 준비

  1. MySQLI 확장 및 전처리 문이 활성화되어 있는지 확인하십시오.

  2. 데이터베이스 연결이 설정되었습니다.

  3. 사용자 와 같은 쿼리를위한 데이터 테이블이 있습니다.

3. 페이지 매김 쿼리의 구현 단계

1 단계 : 데이터베이스 연결 설정

 <?php
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_error) {
    die("연결이 실패했습니다: " . $mysqli->connect_error);
}
?>

2 단계 : 페이징 매개 변수를 설정합니다

 <?php
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$page_size = 10;
$offset = ($page - 1) * $page_size;
?>

3 단계 : 전처리 진술서를 작성하십시오

한계 조항의 변수는 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();
?>

4 단계 : 출력 쿼리 결과

 <?php
while ($row = $result->fetch_assoc()) {
    echo "<p>{$row['id']} - {$row['name']} - {$row['email']}</p>";
}
?>

5 단계 : Pagination Navigation Links

총 레코드 수가 변수 $ 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> ";
}
?>

4. 샘플 코드를 완료하십시오

 <?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();
?>

5. 요약

MySQLI_STMT :: 준비를 사용하여 Pagination 쿼리를 구현하는 핵심은 SQL을 합리적으로 구성하고 매개 변수 바인딩의 한계를 이해하는 것입니다. 한계 매개 변수는 명명 된 자리 표시자를 사용할 수 없지만 Bind_Param을 사용하여 숫자 유형 매개 변수를 바인드하여 안전하고 신뢰할 수있는 페이징 기능을 달성 할 수 있습니다. 실제 프로젝트 에서이 방법은 기존 문자열 스 플라이 싱보다 안전하고 유지하기 쉽습니다. Page Navigation Logic과 결합하여 시스템의 사용자 경험 및 성능을 향상시키기 위해 완전한 페이징 데이터 디스플레이 시스템을 구축 할 수 있습니다.