我正在成功使用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.