2014-12-19 193 views
2

我試圖限制使用變量的結果數量,我設置了它們,並且它仍然返回所有結果,即使我設置了限制。SQL限制返回所有結果

// Results Per page 
$limit = 3; 

// Page Number 
$p=$_GET['p']=="" ? 1:$_GET['p']; 
$start=($p-1)*$limit; 

// Query 
$sql=$conn->prepare("SELECT * FROM adverts WHERE status = 2 ORDER BY ref LIMIT :start, :limit"); 
$sql->bindValue(':limit', $limit, PDO::PARAM_INT); 
$sql->bindValue(':start', $start, PDO::PARAM_INT); 
$sql->execute(); 
$data=$sql->fetch(); 
?> 

<section id="advert-listings"> 
    <div class="container page-wrapper"> 
     <div class="col-md-8 advert-listing"> 
      <?php 
       print_r ($sql); 
       echo $start; 
       echo $limit; 
      ?> 
      <?php if ($sql->rowCount()!=0) : ?> 
       <?php foreach ($adverts as $advert) : ?> 
       <div class="caption"> 
        <ul> 
         <li><i class="fa fa-moon-o"></i> Sleeps: <?= $advert['news']; ?></li> 
         <li><i class="fa fa-paw"></i> Pets: <?= $advert['header']; ?></li> 
         <li><i class="fa fa-key"></i> Ref: <?= $advert['ref']; ?></li> 
        </ul> 
       </div> 
       <?php endforeach; ?> 
      <?php endif; ?> 

正如你可以看到我附和$limit & $start其返回0,3

應當結果限制爲3 0開始

+1

IIRC,你不能使用綁定瓦爾的LIMIT參數 –

+1

什麼的'bindValue()'調用返回?如果我是一個博彩人,我會說'假'...如果你從不檢查錯誤,那麼這樣的事情會發生很多。 –

+0

綁定值是一個int,因此它應該在極限參數中工作 – Sam

回答

3

繼承人,你需要做什麼;

你必須限制和周圍偏移錯誤的方式,將其更改爲限:限OFFSET:偏置

接下來你需要投你的整數,添加此;

$sql->bindValue(':limit', (int)$limit, PDO::PARAM_INT); 
$sql->bindValue(':start', (int)$start, PDO::PARAM_INT); 

接下來,改變這個;

$data=$sql->fetch() 

要:

$adverts=$sql->fetchAll()