我希望每次在我的应用程序中单击下一步时自动连续行,该行获取下一条记录,例如从A1到A2,从A2到A3等等。
这是我的表结构:
|id|code
|1 | A1
|2 | A2
|3 | A3
|4 | A4
答案 0 :(得分:0)
假设code
列在表中是UNIQUE,并假设我们以code
顺序返回行,我们可以在网页中保存当前行的code
值返回发送给用户/浏览器
<input type="hidden" name="code_current" value="A2"/>
(作为单击“下一步”按钮时提交的表单的一部分)
然后在处理表单提交的PHP脚本中,我们从表单中提取值,例如
$code_prev = $_POST['code_current']
并在执行获取“下一行”的SQL时使用该值。这将是一个code
值大于前一个值的行。例如:
$sql = 'SELECT t.id
, t.code
FROM mytable t
WHERE t.code > ?
ORDER BY t.code
LIMIT 1';
假设我们已经配置PDO连接$dbh
以在检测到错误时抛出异常......
$sth = $dbh->prepare($sql);
$sth->execute($code_prev);
我们在网页的隐藏输入中包含code
列(我们从数据库中检索到的行)的值,在用户单击“下一步”时返回的表单上,...
if( $row = $sth->fetch(PDO::FETCH_ASSOC) {
echo '<input type="hidden" name="code_current" value="'
. htmlspecialchars( $row['code'] )
. '"/>';
}
这假定行按code
值按顺序返回。如果以id
顺序返回,则使用id
列代替code
。
如果code
不唯一,也就是说,如果有(或可以)多个行具有相同的code
值,我们可以同时使用code
和{{1} }值。
WHERE子句中的条件是这样的:
id
如果我们提取的上一行是code = A2 id = 2,那么获取“next”行的查询将等同于:
WHERE t.code >= ?
AND (t.code > ? OR t.id > ? )