【问题标题】:SQL limit returns all resultsSQL 限制返回所有结果
【发布时间】:2014-12-19 23:53:35
【问题描述】:

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

// 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; ?>

如您所见,我回显了返回 0、3 的 $limit$start

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

【问题讨论】:

  • IIRC,您不能将绑定变量用于 LIMIT 参数
  • bindValue() 调用返回什么?如果我是一个赌徒,我会说false...如果你从不检查错误,那么这样的事情会发生很多。
  • 绑定值是一个 int 所以它应该在一个限制参数中工作
  • $adverts 来自哪里?

标签: php mysql sql pdo


【解决方案1】:

这是你需要做的;

你有限制和偏移错误的方式,将它们更改为 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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2017-07-07
    • 2012-12-14
    • 2021-06-21
    • 2015-10-23
    • 2012-06-08
    • 2021-01-02
    相关资源
    最近更新 更多