最快的分页准备好的AJAX请求的最安全方法

时间:2017-12-18 13:03:01

标签: php jquery mysql ajax pagination

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()上?

1 个答案:

答案 0 :(得分:-1)

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