©
Dokumen ini menggunakan Manual laman web PHP Cina Lepaskan
PHP+Oracle(OCI) 初步
windy 2000年10月7日
PHP+Oracle(OCI) 初步
从Oracle(OCI)开始
在越来越多的PHP用户选择Oracle作为他们的数据库的情况下,如何访问PHP发布环境下的Oracle接口变的越发的重要了。我们将从快速的浏览一个简单基本且是更加明确的Oracle
的情况开始我们的旅程。Oralce 和Oralce8 使用PHP的OCI8
函数库。在PHP手册里有简要的说明(http://www.php.net/manual/ref.oci8.php):
这些函数允许你访问Oracle 和 Oracle7d 的数据库,它们使用的是Oracle8
Call-Interface(OCI8)。你将需要Oracle8 的客户端函数库来使用这些扩展功能。
这些扩展功能比起标准的Oracle扩展功能来更加的灵活,它支持PHP全局及本地变量及与Oracle的连编,有完整的LOB,FILE及ROWID的支持并且允许你定义用户补充变量。
从这里开始,我将使用“Oracle”指代任何Oracle版本,这篇文章假定你已经安装并运行了PHP和Oracle。而Oracle的帮助可以在http://www.oracle.com
或者 http://technet.oracle.com 找到。
本文的观点是
1.连接到ORALCLE
2.建立并运行SQL语句
3.显示结果
4.限制/偏移量 接近“标记页数”的结果
作为一个附加的功能。你可以看看如何完成显示一个从很大的数据结果得出的限制/偏移量的查询。
<?php
if (empty($offset) || $offset
< 0) {
$offset=0;
}
if (empty($offset) || $offset
< 0) {
$offset=0;
}
$limit = 3;
$conn = OCILogon("user_name", "password", "ORASID");
if
(!$conn) {
echo "<h1>ERROR - Could not connect to
Oracle</h1>";
exit;
}
$sql = "Select count(*) from table_name";
$stmt =
OCIParse($conn, $sql);
if(!$stmt) {
echo "<h1>ERROR - Could
not parse SQL statement.</h1>";
exit;
}
OCIExecute($stmt);
OCIFetchInto($stmt, &$total_rows);
if (
!$total_rows[0] ) {
echo "<h1>Error - no rows
returned!</h1>";
exit;
}
$begin =($offset+1);
$end = ($begin+($limit-1));
if ($end
> $total_rows[0]) {
$end = $total_rows[0];
}
echo
"There are <b>$total_rows[0]</b> results.<br>\n";
echo "Now showing results <b>$begin</b> to
<b>$end</b>.<br><br>\n";
OCIFreeStatement($stmt);
$sql = "Select * from
table_name";
$stmt = OCIParse($conn, $sql);
if(!$stmt) {
echo "<h1>ERROR - Could not parse SQL statement.</h1>";
exit;
}
OCIExecute($stmt);
$i=0;
$j=0;
while( OCIFetchInto($stmt,
&$result_array) ) {
if ($i>=$offset) {
if ($j <$limit) {
for ($k=0; $k<=count($result_array); $k++) {
echo
$result_array[$k]." ";
}
echo "
";
$j++;
}
}
$i++;
}
echo "
";
//
计算结果所需的页面数,
$pages = intval($total_rows[0]/$limit);
// $pages
现在是除剩余的部分外总共所需的页面数
if ($total_rows[0]%$limit) {
// has remainder
so add one page
$pages++;
}
//在显示的是第一页时不显示PREV的连接
if
($offset!=0) {
$prevoffset=$offset-$limit;
echo "<a
href=\"$PHP_SELF?offset=$prevoffset\"><< PREV</a>
\n";
}
// Now loop through the pages to create
numbered links
// ex. 1 2 3 4 5 NEXT >>
for
($i=1;$i<=$pages;$i++) {
// Check if on current page
if
(($offset/$limit) == ($i-1)) {
// $i is equal to current page, so
don't display a link
echo "$i ";
} else {
// $i is
NOT the current page, so display a link to page $i
$newoffset=$limit*($i-1);
echo "<a
href=\"$PHP_SELF?offset=$newoffset\">$i</a> \n";
}
}
//检查当前页面是否为最后一页
if (!((($offset/$limit)+1)==$pages)
&& $pages!=1) {
// Not on the last page yet, so display a NEXT
Link
$newoffset=$offset+$limit;
echo "<a
href=\"$PHP_SELF?offset=$newoffset\">NEXT
>></a><p>\n";
}
OCIFreeStatement($stmt);
OCILogoff($conn);
?>
所有人都还在这里?很好,你完成了!这个方法可以被用在很多更深入的理解Oracle和PHP的能力上。