<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<?php
//总记录数
$db_conn = OCILogon("PICA","PICA","(DESCRIPTION=(ADDRESS=(PROTOCOL =TCP)(HOST=192.168.28.1)(PORT = 1521))(CONNECT_DATA =(SID=ORCL)))");
$sql = "select ROWNUM rn from news";
$par = ociparse($db_conn, $sql);
ociexecute($par);
$nRecords = ocifetchstatement($par, $rs);
//取得页码
$page = @$_GET['page'];
//定义每页显示信息条数
$page_size = 5;
//当页码参数为空时,将页码设为1
if ($page == "")
{
$page = 1;
}
//当页码大于1时,每页的开始记录是 (页码-1) * 每页记录数 +1
$startRow = ($page - 1) * $page_size + 1;
echo "$startRow";
$endRow = $page * $page_size;
//方法一
$cmdstr = "select *
from
(
select ROWNUM rn ,temp.newsid,temp.title
from (select * from news) temp
where ROWNUM <= $endRow
)
where rn >= $startRow";
//执行查询SQL
$parsed = ociparse($db_conn, $cmdstr);
ociexecute($parsed);
$nrows = ocifetchstatement($parsed, $results);
echo "$nrows";
echo "<html><head><title>分页测试</title></head><body>";
echo "<center><h2>分页测试</h2>\n";
//表字段名获取
$arrName = array_keys($results);
echo "<table border=1 cellspacing='0' width='70%'>\n<tr>\n";
//for ($i = 0; $i < count($arrName); $i++)
//{
echo "<td>Rn</td><td>ID</td><td> 标题</td>\n";
//}
echo "</tr>\n";
//循环输出记录
for ($i = 0; $i < $nrows; $i++)
{
echo "<tr>\n";
foreach ($results as $data)
{
echo "<td>$data[$i]</td>\n";
}
echo "</tr>\n";
}
echo "<tr>
<td colspan='" . count($arrName) . "'> 行数:$nrows</td></tr></table>\n<br>";
//显示分页
//总页数
$totalPage = ceil($nrows/$page_size);
//上一页链接
$Prev = $page - 1;
if ($Prev < 1)
{
$Prev = 1;
}
//下一页链接
$Next = $page + 1;
if ($Next > $totalPage)
{
$Next = $totalPage;
}
//输出上一页链接
if ($page <> 1)
{
echo '<span><a href="?page=1">First </a></span>';
echo '<span><a href="?page=' . $Prev . '">Prev</a></span>';
}
else
{
echo '<span>First</span>';
echo '<span>Prev</span>';
}
//页码数字链接
//显示的数字个数
$pageNumber = 5;
//页码数算法
$pagebegin = $page - $pageNumber;
if ($page == 1)
{
$pageend = $pageNumber;
}
else
{
$pageend = $page + $pageNumber;
}
if ($pagebegin <= 0)
{
$pagebegin = 1;
}
if ($pageend > $totalPage)
{
$pageend = $totalPage;
}
//一次向前翻$pageNumber行
if ($page > $pageNumber)
{
echo '<span><a href="?page=' . ($page - $pageNumber) . '"><<</a></span>';
}
//输出动态生成的页码链接
for ($i = $pagebegin; $i <= $pageend; $i++)
{
if ($i == $page)
{
echo '<span style="background:#FFCC99">' . $i . '</span>';
}
else
{
echo '<span><a href="?page=' . $i . '">' . $i . '</a></span>';
}
}
//一次向后翻$pageNumber行
if (($totalPage - $page) > 5)
{
echo '<span><a href="?page=' . ($page + $pageNumber) . '">>></a></span>';
}
//输出下一页链接
if ($page <> $totalPage)
{
echo '<span><a href="?page=' . $Next . '">Next</a></span>';
echo '<span><a href="?page=' . $totalPage . '">Last</a></span>';
}
else
{
echo '<span>Next</span>';
echo '<span>Last</span>';
}
?>
</body>
</html> 代码如上,输出的结果一直只有一页,实际应该有3页的,而且中文乱码了,求大神帮忙看看
分页
至于中文乱码,应该是你数据库和页面编码不一致问题,如果你不能保持一致,可以用iconv函数转码
$endRow = $page * $page_size;
//方法一
$cmdstr = "select *
from
(
select ROWNUM rn ,temp.newsid,temp.title
from (select * from news) temp
where ROWNUM <= $endRow
)
where rn >= $startRow";
那么无论表中有多少数据,都只会取回不多于 $endRow 的记录,何况还不是从第一条看是呢(rn >= $startRow)
所以你的 $nrows 只是读取到的记录数,而不是总记录数。
不能作为计算总页数的依据
先取得总记录数,然后再计算个分页参数和查询当前页数据
本来是可以在连接数据库时指定需要的编码的,但是对于 oracle 分立函数的我不必写(只会 pdo 的),你可以搜索一下写法
当然也可以用 iconv 进行转码