我正在使用PHP Pagination将我的数据用于Oracle数据库。
if(isSet($_GET['search']))
{
$strSQL = oci_parse($c1, "
SELECT
T.TONEID,
T.TONE_NAME,
T.ACTIVE,
TO_CHAR(T.DATEADDED, 'DD-MON-YYYY HH24:MI:SS') AS DATEADDEDS,
T.ADDEDBY
FROM
WA_BT_TBL_TONE T
WHERE
TONE_NAME LIKE '%" . $_GET['search'] . "%'
ORDER BY T.DATEADDED DESC
");
}
else
{
$strSQL = oci_parse($c1, "
SELECT
T.TONEID,
T.TONE_NAME,
T.ACTIVE,
TO_CHAR(T.DATEADDED, 'DD-MON-YYYY HH24:MI:SS') AS DATEADDEDS,
T.ADDEDBY
FROM
WA_BT_TBL_TONE T
ORDER BY T.DATEADDED DESC
");
}
oci_execute ($strSQL,OCI_DEFAULT);
$Num_Rows = oci_fetch_all($strSQL, $dData);
$Per_Page = 10;
$Page = $_GET["Page"];
if(!$_GET["Page"])
{
$Page=1;
}
$Prev_Page = $Page-1;
$Next_Page = $Page+1;
$Page_Start = (($Per_Page*$Page)-$Per_Page);
if($Num_Rows<=$Per_Page)
{
$Num_Pages =1;
}
else if(($Num_Rows % $Per_Page)==0)
{
$Num_Pages =($Num_Rows/$Per_Page) ;
}
else
{
$Num_Pages =($Num_Rows/$Per_Page)+1;
$Num_Pages = (int)$Num_Pages;
}
$Page_End = $Per_Page * $Page;
if($Page_End > $Num_Rows)
{
$Page_End = $Num_Rows;
}
$no = 1;
if($Num_Rows > 1)
{
for($i=$Page_Start;$i<$Page_End;$i++)
{
?>
<tr>
<td><?php echo $dData['TONE_NAME'][$i]; ?>
</tr>
<?php
}
}
HTML分页
<div class="pagination">
<?php
if($Prev_Page)
{
echo " <a href='?Page=$Prev_Page'>Back</a> ";
}
for($i=1; $i<=$Num_Pages; $i++)
{
if($i != $Page)
{
echo "<a href='?Page=$i'>$i</a>";
}
else
{
echo "<b><a> $i </a></b>";
}
}
if($Page!=$Num_Pages)
{
echo " <a href ='?Page=$Next_Page'>Next</a> ";
}
?>
</div>
上面的代码运行良好,直到我尝试用文本或数字-5手动编辑页面时,表格显示为空行。示例:http://example.com/Page=blabla
我的问题:
1.如果我们手动编辑具有奇怪值的页面,例如带有文本或-5?的话,如何防止数据显示为空
2.是否可以将页码数限制为5乘5?
答案 0 :(得分:0)
一般来说,对于php中的分页,我建议使用两个查询:
SELECT count(*) from tableName
如果blablabla的元素数为0,那么您就不会处理第二个查询
SELECT field1, field2 FROM tableName
选择页面的LIMIT。
此策略应解决您的问题。
我找到了一些有用的东西:How can I perform this query in oracle
编辑:
我不擅长oracle但在这里我只是想说每个页面上的所有记录都不是好主意。我找到了一些可以帮助http://www.oracle.com/technetwork/issue-archive/2006/06-sep/o56asktom-086197.html
的东西