php oci oracle,PHP+Oracle(OCI)初步

oracle

从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.限制/偏移量 接近“标记页数”的结果

作为一个附加的功能。你可以看看如何完成显示一个从很大的数据结果得出的限制/偏移量的查询。

ERROR - Could not connect to Oracle";

exit;

}

/*

如果连接成功,$conn就是一个连接符。否则,脚本将结束并且输出“Could not connect to Oracle”的错误信息

现在开始来分析并且创建你的SQL语句,由无限制的查询结果得到可以记数的记录。

在这里的格式语句“Select count(*) from table_name”相当于count(),是个SQL函数将会在数据库里执行。比由依靠PHP计算得到的返回结果要好。

*/

$sql = "Select count(*) from table_name";

$stmt = OCIParse($conn, $sql);

if(!$stmt) {

echo "

ERROR - Could not parse SQL statement.";

exit;

}

/*

如果你输入了一个错误的SQL语句或者出现了另一个错误,你将看到“无法分析SQL”的错误提示,$stmt现在就是一个定义语句。

现在执行你的分析语句

*/

OCIExecute($stmt);

/*

语句现在已经被执行了,但是正如你所看到的,没有结果标志符从OCIExecute()返回,由OCIParse()返回的结果包含了所有Oracle所需要的信息。

现在开始选择这个查询的结果,$total rows[0]将会包含一个数。如果没有行被返回,则显示错误并退出脚本的运行。

*/

OCIFetchInto($stmt, &$total_rows);

if ( !$total_rows[0] ) {

echo "

Error - no rows returned!";

exit;

}

/*

这段代码是可选择的但将会使返回的结果更清楚,显示一个类似于“总共有15条记录,现在显示的是第4条到第15条结果。”的注释

*/

$begin =($offset+1);

$end = ($begin+($limit-1));

if ($end > $total_rows[0]) {

$end = $total_rows[0];

}

echo "There are $total_rows[0] results.

n";

echo "Now showing results $begin to $end.

n";

/*

现在是言归正传的时候了,释放原先的语句标识然后建立SQL语句.分析并执行SQL语句,

写代码时需注意:不同于MYSQL,Oracle在SQL语句中不支持限制语句。就本身而言,有很多方法选择特定的行,最好的方法是把选择的结果放在一个临时表里或者“缓冲“所有的结果。这样的方法已经超出了这篇教程的范围了。我们将使用一个更简单的方法,在下面将进一步的解释。

*/

OCIFreeStatement($stmt);

$sql = "Select * from table_name";

$stmt = OCIParse($conn, $sql);

if(!$stmt) {

echo "

ERROR - Could not parse SQL statement.";

exit;

}

OCIExecute($stmt);

/*

现在显示结果。最简单的做法是在结果集合中使用这个循环。HTML将用来显示最终的结果,但是这个范例非常的简单,所以我们一个也不会用。

编写代码时注意:如上述规定的,在Oracle里是无法限制的,所以我们必须通过在全部的结果集取出我们想要的和终止我们已经有的结果来做这个循环。

在这一小节里,我们将会有几种不同的方法,实际上应该有更好的方法来写这个代码。但是我认为我的这种方法不太容易读懂,它确实运行有效。

*/

$i=0;

$j=0;

while( OCIFetchInto($stmt, &$result_array) ) {

if ($i>=$offset) {

if ($j for ($k=0; $k<=count($result_array); $k++) {

echo $result_array[$k]." ";

}

echo "

";

$j++;

}

}

$i++;

}

echo "

";

/*

结果将显示在当前的页面里,现在是给访问者一个使用NEXT/PREV点击到其他页面的时候了

*/

// 计算结果所需的页面数,

$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 "<< PREV 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 display a link

echo "$i ";

} else {

// $i is NOT the current page, so display a link to page $i

$newoffset=$limit*($i-1);

echo "$i n";

}

}

//检查当前页面是否为最后一页

if (!((($offset/$limit)+1)==$pages) && $pages!=1) {

// Not on the last page yet, so display a NEXT Link

$newoffset=$offset+$limit;

echo "NEXT >>

n";

}

/*

现在我们完成了有关Oracle的任务,所以释放最后的语句标识并且退出。

*/

OCIFreeStatement($stmt);

OCILogoff($conn);

?>

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值