0

这是我的脚本

 <?php

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

    $random = $conn->query("SELECT * FROM records ORDER BY RAND()");
    $row = $random->fetch();

    $stmt_1 = $conn->prepare("SELECT * FROM records WHERE id > ? ORDER BY id ASC LIMIT 1");
    $stmt_1->bindValue(1,$id);
    $stmt_1->execute();
    $stmt_1->setFetchMode(PDO::FETCH_ASSOC);
    $row = $stmt_1->fetch();
    $id = $row['id'];

    $stmt_1 = $conn->prepare("SELECT * FROM records WHERE id < ? ORDER BY id DSC LIMIT 1");
    $stmt_1->bindValue(1,$id);
    $stmt_1->execute();
    $stmt_1->setFetchMode(PDO::FETCH_ASSOC);
    $row = $stmt_1->fetch();
    $id = $row['id'];

    ?>

但我有一个问题。例如,我在数据库中有 4 条记录:

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

查询工作正常,它给了我下一条记录,但不是我放的 id,如果我放 id=1 返回 id 2 或 id=2 返回 id 3 的信息,结果不准确。所以我的问题是我应该怎么做才能返回正确的结果而不是+1。我知道它从 0 开始计数,我想在我的脚本中修复它,我想让它从 1 开始。

4

2 回答 2

1

替换这个

   $id = 1;

经过

   $id = 0;

或替换这个

    SELECT * FROM records WHERE id > ?

经过

   SELECT * FROM records WHERE id >= ?
                                   ^--//-will look for id equal to 1 or bigger
于 2013-07-29T19:12:31.823 回答
0

为什么不将查询更改为

编辑:查询将不起作用,因为记录被删除。

$stmt_1 = $conn->prepare("SELECT * FROM records WHERE id = ?");
$stmt_1->bindValue(1,$id +1);
$stmt_1->execute();

因此,您将获得具有下一个最高 id 的记录。

只是优化查询的提示。还有一个问题,您是否在表定义中使用了 auto_increment。如果你这样做了,你要记住这个mysql-sequence从一个开始计算主键

希望能帮助到你

于 2013-07-29T19:24:03.200 回答