-1

私はこのphpスクリプトを作成し、次の行と前の行を返すようにしようとしていますが、IDを入力すると、スクリプトが別のものを返すなどの問題が1つあります。

これは私のデータベースです

ID  String
1   Test 1
2   Test 2
3   Test 3
4   Test 4

したがって、./index.php?id=1 を入力すると、id=2 および id=2 => id=3 などの結果が返されます... 私の質問は、+1 ではなく正確な結果を返すように修正する方法です. <= または => 演算子を試してみましたが、結果は正しいのですが、リンクが機能しません。

ここにスクリプトがあります

<?php

    if(isset($_GET['id']))
{
    $id = (int)$_GET['id'];
}else
{
    $id = 0;
}

$stmt1 = $db->prepare("SELECT * FROM records WHERE id > ? ORDER BY id ASC LIMIT 1");
$stmt1->bindValue(1,$id);
$stmt1->execute();
$row = $stmt1->fetch();

$stmt2 = $db->prepare("SELECT * FROM records WHERE id < ? ORDER BY id DESC LIMIT 1");

$stmt2->bindValue(1,$id);
$stmt2->execute();
$row = $stmt2->fetch();




echo $row['id'];
echo "<br/>";
echo $row['string'];

?>
4

2 に答える 2

1

問題がそれほどばかげているかどうかはわかりませんが、他に説明はありません。

ページを作成するには、次の 3 つの選択を行う必要があります。

  1. 現在のページデータを取得する
  2. 前のIDを取得する
  3. 次のものを得るために

しかし、私は2つの選択しか見ることができません

そのため、表示するページのデータを選択する必要があります

if(isset($_GET['id']))
{
    $sql = "SELECT * FROM records WHERE id = ?";
    $stm = $db->prepare($sql);
    $stm->execute(array($_GET['id']));
} else {
    $sql = "SELECT * FROM records ORDER BY id ASC LIMIT 1";
    $stm = $db->query($sql);
}
$row = $stm->fetch();

そして今、あなたは前と次のIDを取得するために行くことができます

$sql = "SELECT id FROM records WHERE id < ? LIMIT 1";
$stm = $db->prepare($sql);
$stm->execute(array($row['id']));
$prev = $stm->fetchColumn();

$sql = "SELECT id FROM records WHERE id > ? LIMIT 1";
$stm = $db->prepare($sql);
$stm->execute(array($row['id']));
$next = $stm->fetchColumn();
于 2013-08-01T15:30:42.890 に答える