Php 使用PDO获取上一行和下一行以创建链接

Php 使用PDO获取上一行和下一行以创建链接,php,mysql,sql,pdo,Php,Mysql,Sql,Pdo,我的查询中有一些糟糕的sytax,我试图创建“prev_id”以拉入$row结果链接。有没有更好的办法 编辑:错误是检查与您的MySQL服务器版本对应的手册,以获得在“prev_id”附近使用的正确语法 function traversePhoto($the_selected_id) { global $pdo; $id = $the_selected_id; $stmt_a = $pdo->prepare(" (SELECT * FROM images WHERE id &l

我的查询中有一些糟糕的sytax,我试图创建“prev_id”以拉入$row结果链接。有没有更好的办法

编辑:错误是检查与您的MySQL服务器版本对应的手册,以获得在“prev_id”附近使用的正确语法

function traversePhoto($the_selected_id) {
global $pdo;

$id = $the_selected_id;

$stmt_a = $pdo->prepare("
    (SELECT * FROM images WHERE id < '.intval($id).' ORDER BY id DESC LIMIT 1)
     UNION (SELECT * FROM images WHERE id = (SELECT MAX(id) FROM images)) LIMIT 1 prev_id");
$stmt_b = $pdo->prepare("
    (SELECT * FROM images WHERE id > '.intval($id).' ORDER BY id ASC LIMIT 1)
     UNION (SELECT * FROM images WHERE id = (SELECT MIN(id) FROM images)) LIMIT 1 next_id");

// $vars = array(':id' => $id);
$prev = $stmt_a->execute();
$next = $stmt_b->execute();

if ($prev) {
    while($row = $stmt_a->fetchObject()) {
        echo '<a href="' . $row['prev_id'] . '">Previous</a>';
    } 
} else {
    echo 'no previous';
}

if ($next) {
    while($row = $stmt_b->fetchObject()) {
        echo '<a href="' . $row['next_id'] . '">Next</a>';
    }
} else {
    echo 'no next';
}
}像这样试试看

<?php function traversePhoto($the_selected_id) {
global $pdo;

$id = $the_selected_id;

$stmt_a = $pdo->prepare("
(SELECT * FROM images WHERE id < ? ORDER BY id DESC LIMIT 1)
 UNION (SELECT * FROM images WHERE id = (SELECT MAX(id) FROM images)) LIMIT 1");
$stmt_b = $pdo->prepare("
(SELECT * FROM images WHERE id > ? ORDER BY id ASC LIMIT 1)
 UNION (SELECT * FROM images WHERE id = (SELECT MIN(id) FROM images)) LIMIT 1");

// $vars = array(':id' => $id);
$prev = $stmt_a->execute(array( (int)$id ));
$next = $stmt_b->execute(array( (int)$id ));

if ($stmt_a->rowCount() > 0) {
    while($row = $stmt_a->fetch(PDO::FETCH_ASSOC)) {
        echo '<a href="' . $row['prev_id'] . '">Previous</a>';
    } 
 } else {
    echo 'no previous';
}

if ($stmt_b->rowCount() > 0) {
   while($row = $stmt_b->fetch(PDO::FETCH_ASSOC)) {
      echo '<a href="' . $row['next_id'] . '">Next</a>';
  }
} else {
echo 'no next';
}

您可以尝试将查询结果存储在会话中,并跟踪用户的当前位置等。。与其重新计算每个页面上的上一页、下一页、最后一页等内容,不如说是什么样子?请不要使用全局…@jessicaldale:是的,不要使用全局。它们是邪恶的,破坏了封装:|这是fetch_assoc。这样使用更好,但我很懒:$sth->fetchPDO::fetch_assoc;谢谢John-它仍然不喜欢我在查询中使用“上一个id”和“下一个id”。对不起,我的错。它应该是$stmt_a->rowCount,而不是$prev->rowCount。我编辑了我的帖子。我看不到你的表格是什么样子。但是我想你应该用$row['id']替换$row['next_id']和$row['prev_id']我试图创建'next_id'作为别名??从用于创建链接href的sql查询。这有意义吗?