質問: $i) ? ' class="current"':"";//現在地を表すCSSクラス if($i <= $limit && $i > 0 )//1以上最大ページ数以下の場合 print ''.$i.'';//ページ番号リンク表示 } //最後のページへのリンク if($limit > $end){ if($limit-1 > $end ) print "..."; //ドットの表示 print ''.$limit.''; } if($page < $limit){ print '次へ »'; } /*確認用 print "current:".$page.""; print "next:".$next.""; print "prev:".$prev.""; print "limit:".$limit.""; print "start:".$start.""; print "end:".$end.""; */ } ?> ``` $rec=$stmt->fetch(PDO::FETCH_ASSOC);の箇所が原因かなと思っているのですが なかなか上手くいかず困っています。 どうぞよろしくお願いいたします。
回答: ご自身で予想されている通り、 > > $rec=$stmt->fetch(PDO::FETCH_ASSOC);の箇所 > > > 周辺の`for`文の書き方が原因です。 ``` for($i=$start;$i<$end;$i++) ``` で 「DBから取得したレコードのうち、`$start`行目以上`$end`行未満のレコードを表示」 しようとしているつもりかと思いますが、 実際は 「変数`$i`を`$start`から開始して1ずつ増加させ、`$end`に達したら終了」 という意味になりますので、必ず最初の3行だけを表示してしまうことになります。 行数が`$start`に達するまで繰り返し`$stmt->fetch`を呼び出す必要があるので、 以下のように修正すればうまく行くと思います。 Before ``` for($i=$start;$i<$end;$i++) { $rec=$stmt->fetch(PDO::FETCH_ASSOC); print ''; print ''; print ''; print ''.$rec['pro_name'].''; print ''; print ''.$rec['pro_subname'].''; print ''; print '商品ID : '.$rec['pro_id'].''; print '価格 :'.$rec['pro_tanka'].'円'; print ''; print ''; print ''.$rec['bikou1'].''; if($rec==false) { break; } } ``` After ``` for ($i=0; $i<$end; $i++) { $rec=$stmt->fetch(PDO::FETCH_ASSOC); if ($rec === false) { break; } if ($i < $start) { continue; } print ''; print ''; print ''; print ''.$rec['pro_name'].''; print ''; print ''.$rec['pro_subname'].''; print ''; print '商品ID : '.$rec['pro_id'].''; print '価格 :'.$rec['pro_tanka'].'円'; print ''; print ''; print ''.$rec['bikou1'].''; } ``` ついでに、`if($rec==false)`は`$stmt->fetch`を呼び出した直後にチェックすべきです。 さもないと、おかしなデータを出力してしまうことになりますので。