1

インターネット上の「単純な」ページ付けチュートリアルでさえ、私は本当に理解するのに苦労しました。

私は会社のイントラネットサイトを作成中です。それを完了するための唯一のステップは、すべてのクエリにページを付けることです。すべてのクエリには数千の結果、特に検索結果が含まれるためです。

私の質問は、以下のようにクエリをページ付けできるかどうかです。

SELECT * FROM hdticket WHERE id = 22;
4

2 に答える 2

2

LIMITMySQLクエリに句を追加する必要があります。これは次のように簡単です。

SELECT * FROM hdticket WHERE id = :ticknum LIMIT 0, 10

これにより、最初から10個のレコードがフェッチされます(レコードがゼロインデックスベースであると想像してください)。最初の数字はいつからフェッチを開始するかであり、2番目の数字はその後フェッチする数です。したがって、0から、次の10レコードをフェッチしています。これは1ページになります。

レコードの後続のページを取得するには、最初の番号をインクリメントするだけです。したがって、2ページ目を取得するには、10からカウントを開始し、次の10レコードをフェッチする必要があります。このクエリは次のようになります。

SELECT * FROM hdticket WHERE id = :ticknum LIMIT 10, 10

そして3ページ目:

SELECT * FROM hdticket WHERE id = :ticknum LIMIT 20, 10

等々。うまくいけば、パターンが出現するのを見ることができます。

パラメータを使用している$_GETので、URLを調整してレコードをページングすることができます。したがって、http://intranet/index.php?page=2のURLは次のようになります。

<?php

$page = intval($_GET['page']);
$limit = 10;
$offset = (($page - 1) * $limit);

$sql = "SELECT * FROM hdticket WHERE id = :ticknum LIMIT $offset, $limit";

お役に立てれば。

また、いくつかの傍白。mysql_非推奨になっているため、関数を使用しないでください。これは、公式のマニュアルページ(http://php.net/manual/en/function.mysql-query.php )から確認できます。

さらに、URLに含まれるものを取得し、それをSQLクエリで直接使用するため、コードはSQLインジェクション攻撃に対して脆弱です。そこにページネーションの数値を入力する場合、これはすべて問題ありませんが、悪意のある人がSQLをURLに入力すると、テーブルやデータベース全体の切り捨てなど、あらゆる種類の処理を実行できます。チェックせずに通過するだけです。

これに対抗するために、 PDOmysql_などの関数の代替を使用する場合は、SQLステートメントで変数を準備できます。コードは次のようになります。

<?php

$sql = "SELECT * FROM hdticket WHERE id = :ticknum LIMIT :offset, :limit";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':ticknum', $ticknum, PDO::PARAM_INT);
$stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
$stmt->bindParam(':limit', $limit, PDO::PARAM_INT);
$stmt->execute();

これにより、SQL文字列に渡されるデータが期待どおりになり、SQLインジェクションを防ぐために自動的にエスケープされます。

于 2012-12-31T15:22:34.210 に答える
-2

あなたはそうするためにtop/limitを使うことができます。

トップ10のみが必要な場合は、次のようにします。

  select top 10,* from table;

または、ページに移動する場合は、次のようにします。

  select * from table limit 10 , 20;
于 2012-12-31T15:20:47.723 に答える