現在の位置: ホーム> 最新記事一覧> mysqli_stmt :: Paginationクエリを実装する準備をします

mysqli_stmt :: Paginationクエリを実装する準備をします

gitbox 2025-05-28

MySQLに基づいてPHPアプリケーションを開発する場合、データプレゼンテーションのクエリ効率とユーザーエクスペリエンスを改善するために、通常、ページングクエリを使用してセグメントにデータをロードします。 SQLを直接スプライシングする方法を使用するのと比較して、 MySQLI_STMT ::準備機能を使用すると、SQL注入を効果的に防ぐだけでなく、コードの読みやすさとメンテナンスも改善できます。この記事では、mysqli_stmt :: forpers bearteを使用してページネーションクエリを実装する方法について詳しく知ることができます。

1。基本概念

ページネーションクエリのコアは、SQLの限界節にあり、その構文は次のとおりです。

 SELECT * FROM table_name LIMIT offset, page_size;

で:

  • オフセット:オフセット、どのレコードから読むかを示します。

  • page_size :ページごとに表示されるレコードの数。

mysqli_stmt :: prepare関数を使用する場合、制限句のパラメーターは変数に直接バインドすることができないため、この制限をバイパスするためにいくつかのトリックを使用する必要があります。

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:前処理ステートメントを作成します

Limit句の変数は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:ページネーションナビゲーションリンク

レコードの総数が可変$ 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'>第 $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 :: prepareを使用してページネーションクエリを実装する鍵は、SQLを合理的に構築し、パラメーターバインディングの制限を理解することです。制限パラメーターは名前付きプレースホルダーを使用することはできませんが、 bind_paramを使用して数値タイプパラメーターをバインドして、安全で信頼できるページング機能を実現することができます。実際のプロジェクトでは、この方法は、従来の弦のスプライシングよりも安全で維持が容易です。ページナビゲーションロジックと組み合わせることで、完全なページングデータ表示システムを構築して、システムのユーザーエクスペリエンスとパフォーマンスを向上させることができます。