我有一个从 MySQL 数据库中绘制的表,其中包含 4 个字段:id
、postcode
、blacklist_reason
、signup_attempts
。
然后我有以下类来输出和处理这个问题,它是一个返回数组$MySQL
的 mysql 类,而不是 MySQL 资源。ExecuteSQL
class Blacklist {
private $MySQL = null;
private $rowsPerPage = 6;
public function __construct( $MySQL ) {
$this->MySQL = $MySQL;
}
public function displayBlacklistList( $page = 1 ) {
( $page == 1 ) ? $start = 0 : $start = $this->rowsPerPage*($page-1);
$finish = $this->rowsPerPage;
$sql = "SELECT * FROM blacklist LIMIT $start, $finish";
$res = $this->MySQL->ExecuteSQL($sql);
echo '
<p><a href="#" class="btn btn-success">Add row</a></p>
<table class="table table-hover table-bordered table-striped">
<thead>
<tr>
<th>ID</th>
<th>Postcode</th>
<th>Blacklist reason</th>
<th>Signup attempts</th>
<th>Actions</th>
</tr>
</thead>
<tbody>';
foreach( $res as $k => $v ) {
echo '
<tr>
<td>'.$v['id'].'</td>
<td>'.$v['postcode'].'</td>
<td>'.$v['blacklist_reason'].'</td>
<td>'.$v['signup_attempts'].'</td>
<td><a href="#" class="btn btn-primary">Edit</a> <a href="#" class="btn btn-danger">Remove</a></td>
</tr>';
}
echo '
</tbody>
</table>';
echo $this->_displayPagination( $page, $res );
}
}
一切都按预期工作并显示,除非我在数据库中有 6 行并设置$this->rowsPerPage = 5
为这会导致第二页(显示最后一行)循环并显示与表中的字段一样多的行,以及数据在每个单元格中是预期结果的第一个字符。如果我在表中有 10 行并且每页显示 9 行,也会发生同样的情况,等等。
例如我得到这个:
ID Postcode Blacklist reason Signup attempts
7 7 7 7
B B B B
A A A A
6 6 6 6
当我期望:
ID Postcode Blacklist reason Signup attempts
7 BH233SF A reason 6
问题显然出在foreach()
循环上,我习惯于在while( mysql_fetch_assoc() )
这里使用循环,但在这种情况下,我使用的是返回数组而不是对象的类,我不知道为什么会这样。
-- 问题解答 --
executeSQL
返回一个关联数组:
Array ( [id] => 7 [postcode] => BH233SF [blacklist_reason] => A reason [signup_attempts] => 6 )
它返回的内容很好,因为 var_dump 也证明了这一点:
array(4) { ["id"]=> string(1) "7" ["postcode"]=> string(7) "BH233SF" ["blacklist_reason"]=> string(8) "A reason" ["signup_attempts"]=> string(1) "6" }