用于对准备好的AJAX请求进行分页的最快且最安全的方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用于对准备好的AJAX请求进行分页的最快且最安全的方法相关的知识,希望对你有一定的参考价值。
function ajaxFetch () {
var search = $('input').val();
$.get('fetch.php', {search: search}, function(data){
$('div').html(data);
})
}
$('input').keyup(function(){
ajaxFetch();
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type='search'>
<div></div>
在我的脚本中,我从fetch.php
的表中获取数据
<?php
$search = $_GET['search'];
if(isset($_GET['offset'])){ $offset = $_GET['offset';] } else { $offset = 0 }
$limit = 5;
$sql = "
SELECT a.name, b.fname, c.lname, d.mname FROM table a
LEFT JOIN tableb b ON a.id = b.id
LEFT JOIN tablec c ON a.id = c.id
LEFT JOIN tabled d ON a.id = d.id
WHERE a.name LIKE %$search% AND a.vara = :vara AND a.varb = :varb AND a.varc = :varc
LIMIT $offset, $limit
";
~..prepare()..execute()..~
while($row = $stmt->fetch()){
echo "<span>{$row['name']},{$row['fname']}, {$row['lname']}, {$row['mname']}</span>";
}
$page = $_GET['page'];
$total = $stmt->rowCount();
$offset = ($page - 1) * $limit;
$start = $offset + 1;
$end = min(($offset + $limit), $total);
if ($total > 5) {
$prevlink = ($page > 1) ? '<a href="?page=1" title="First page">«</a> <a href="?page=' . ($page - 1) . '" title="Previous page">‹</a>' : '<span class="disabled">«</span> <span class="disabled">‹</span>';
$nextlink = ($page < $pages) ? '<a href="?page=' . ($page + 1) . '" title="Next page">›</a> <a href="?page=' . $pages . '" title="Last page">»</a>' : '<span class="disabled">›</span> <span class="disabled">»</span>';
}
?>
我尝试在同一个查询中使用rowCount()
来节省时间和SQL进程,但是它没有用,所以我想知道什么是使这个分页工作的最好,最快和最安全的方法?
或者我只是继续传统2查询其中一个是COUNT(*)
然后onclick
在分页链接调用ajaxFetch()
再次与新的偏移?
答案
由于用于生成输出的查询包含LIMIT
子句,因此永远不会返回所有可能行的数量,因此必须执行两次查询。
以上是关于用于对准备好的AJAX请求进行分页的最快且最安全的方法的主要内容,如果未能解决你的问题,请参考以下文章