PDO准备声明的分页

时间:2018-02-13 15:12:50

标签: pdo pagination prepared-statement

我正在成功使用David Carr的分页类进行整表调用(即我在没有过滤的情况下调用表中的所有行)。包括我的配置和课程后,我这样做:

$pages = new Paginator('3','p');
    $stmt = $dbh->query('SELECT count(id) FROM sermons');
$row = $stmt->fetch(PDO::FETCH_NUM);
$total = $row[0];

//pass number of records to
$pages->set_total($total); 

$results = $dbh->query('SELECT * FROM sermons ORDER BY date_preached DESC '.$pages->get_limit()); ?>
<div class="paging"><p><?php echo $total; ?> sermons found</p> <?php echo $pages->page_links();?></div>
<?php
foreach($results as $row)

效果很好,但现在我试图通过表单来实现用户过滤的结果,并且因为我无法在查询中使用未命名的占位符,所以我试图尝试做一个准备(我猜测它更安全):

    $pages = new Paginator('2','p');
$series = isset($_POST['series']) ? $_POST['series'] : false;
    try {
    $stmt = $dbh->prepare("SELECT count(id) FROM sermons WHERE series = ?");
        $stmt->execute(array($series));
        $row = $stmt->fetch(PDO::FETCH_NUM);
        $total = $row[0];

//pass number of records to
$pages->set_total($total);
$results = $dbh->prepare("SELECT * FROM sermons WHERE series = ? ".$pages->get_limit());
    $results->bindParam(1, $series, PDO::PARAM_STR);
    $results->execute(array($series));

// the call
echo $total; ?> sermons found</p> <?php echo $pages->page_links();

当我第一次从表单进入结果页面时,看起来一切正常。该调用正确识别为搜索结果找到的布道数,并显示前两个(或者我在$ pages语句中设置的多少)。但是当我点击另一个页面结果,没有布道显示时,计数消失了,而我的!isset(found_rows)echo也返回零。

我原本以为这个问题起初是我试图这样做而没有约束力。这是有问题的,因为没有分页我可以显示页面而不受约束。无论如何,我一直在尝试使用bindValue和bindParam,但没有运气。

我在准备声明中处理错误了吗?或者是什么?

注意:我的结果页面显示了没有的分页:

$series = isset($_POST['series']) ? $_POST['series'] : false;
    try {

    $results = $dbh->prepare("SELECT * FROM sermons WHERE series = ?");
$results->execute(array($series));
// Etc.

0 个答案:

没有答案