SQL限制返回所有结果

时间:2014-12-19 23:53:35

标签: php mysql sql pdo

我正在尝试使用我设置的变量限制结果数量,即使我设置了限制,它仍会返回所有结果。

// 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&amp; $start返回0,3。

应该从0开始将结果限制为3。

1 个答案:

答案 0 :(得分:3)

你需要做什么;

你有限制和偏移错误的方法,将它们更改为LIMIT:limit OFFSET:offset

接下来你需要强制注入,添加它;

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

接下来,更改此内容;

$data=$sql->fetch()

要:

$adverts=$sql->fetchAll()