用于对准备好的AJAX请求进行分页的最快且最安全的方法

问题描述 投票:0回答:1

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">&laquo;</a> <a href="?page=' . ($page - 1) . '" title="Previous page">&lsaquo;</a>' : '<span class="disabled">&laquo;</span> <span class="disabled">&lsaquo;</span>';
        $nextlink = ($page < $pages) ? '<a href="?page=' . ($page + 1) . '" title="Next page">&rsaquo;</a> <a href="?page=' . $pages . '" title="Last page">&raquo;</a>' : '<span class="disabled">&rsaquo;</span> <span class="disabled">&raquo;</span>';
    }
?>

我尝试在同一个查询中使用rowCount()来节省时间和SQL进程,但是它没有用,所以我想知道什么是使这个分页工作的最好,最快和最安全的方法?

或者我只是继续传统2查询其中一个是COUNT(*)然后onclick在分页链接调用ajaxFetch()再次与新的偏移?

php jquery mysql ajax pagination
1个回答
-1
投票

由于用于生成输出的查询包含LIMIT子句,因此永远不会返回所有可能行的数量,因此必须执行两次查询。

© www.soinside.com 2019 - 2024. All rights reserved.