在SQL查询中使用JQuery变量作为OFFSET

时间:2016-02-27 12:11:22

标签: javascript php jquery mysql ajax

我正在尝试为新闻Feed中的帖子实现无限滚动功能。一旦用户到达页脚,帖子就会被加载到新闻源中。


问题

每次执行ajax调用时,我都希望增加查询的偏移量。我想以某种方式将jquery偏移量变量传递给php和SQL查询。


守则

// Infinite Scroll
var offset = 0;
if($(window).scrollTop() >= $('.post-wrapper').offset().top + $('.post-wrapper').outerHeight() - window.innerHeight) {
    if (element_in_scroll("footer")) {
        $('div.loadmoreajaxloader').show();
        $.ajax({
            url: '<?= Config::get('URL'); ?>index/loadPosts',
            success: function(data) {
                if(data) {
                    $(".post-wrapper").append(data);
                    $('div.loadmoreajaxloader').hide();
                    offset++;
                } else {
                    $('div.loadmoreajaxloader').html('<center>Es sind keine weiteren Posts vorhanden.</center>');
               }
           }
       });
   }
});

查询

$query = $database->prepare("SELECT * FROM posts LIMIT 1 OFFSET $offset");
$query->execute();

return $query->fetchAll();

<小时/> 偏移量按照我的意愿递增,在jquery代码中(console.log(offset)输出1,2,3等等......)。但是,我无法将此变量放入SQL查询中。

我会非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

您没有在ajax请求中发送javascript变量offset

更改以下行:

url: '<?= Config::get('URL'); ?>index/loadPosts',

为:

url: '<?= Config::get('URL'); ?>index/loadPosts?offset=' + offset,

防止SQL注入:

$query = $database->prepare("SELECT * FROM posts LIMIT 1 OFFSET :offset");
$query->execute(array(':offset' => $offset));

return $query->fetchAll();

答案 1 :(得分:1)

  1. 传递AJAX中的GET值。
  2. offset PHP文件中的// Infinite Scroll var offset = 0; if($(window).scrollTop() >= $('.post-wrapper').offset().top + $('.post-wrapper').outerHeight() - window.innerHeight) { if (element_in_scroll("footer")) { $('div.loadmoreajaxloader').show(); $.ajax({ url: '<?= Config::get('URL'); ?>index/loadPosts?offset='+offset, success: function(data) { if(data) { $(".post-wrapper").append(data); $('div.loadmoreajaxloader').hide(); offset++; } else { $('div.loadmoreajaxloader').html('<center>Es sind keine weiteren Posts vorhanden.</center>'); } } }); } }

    $offset = $_GET['offset'];
    $query = $database->prepare("SELECT * FROM posts LIMIT 1 OFFSET $offset");
    $query->execute();
    
    return $query->fetchAll();
    
  3. 在PHP文件中

    AccountTitle     ReportMonth     Amount     
    --------------------------------------------
    Visa            January          3320.00
    Medical         January          1635.82     
    Commission      January          2200.00    
    Staff Allowance January          1215.00    
    Commission      January          2200.00    
    Medical         February         1636.00    
    Commission      February         2200.00        
    Staff Allowance March            1750.00