php oci8 访问oracle 成功

本文详细介绍了如何在PHP环境中连接并操作Oracle数据库,包括基本的连接、SQL语句执行和结果展示,以及如何实现分页查询。适用于PHP开发者希望在项目中整合Oracle数据库功能时的实践指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. <?php

  2. echo date("Y-m-d H:i:s");
  3. echo "<br />";
  4. echo "<br />";
  5. $str="(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST = XXX)(PORT=1521)))(CONNECT_DATA=(SERVER = DEDICATED)(SERVICE_NAME = orcl)))";
  6. $dbconn=oci_connect("xxx","xxx",$str); 
  7. if(!$dbconn)
  8. {
  9.     echo "Can not connect.";
  10.     exit;
  11. }

  12. //OCIFreeStatement($stmt);

  13. $sql="select u.login_id,decryptionr5(u.login_id,u.password),u.password from users u where u.login_id like '%corp%' or u.login_id like 'admin' or u.login_id like '�1%' ";
  14. $stmt = OCIParse($dbconn, $sql);
  15. OCIExecute($stmt);



  16. $i=0; 
  17. $j=0;
  18. $offset=0; 
  19. $limit=10;
  20. while( OCIFetchInto($stmt, &$result_array)) { 
  21.     if ($i>=$offset) { 
  22.         if ($j <$limit) { 
  23.             for ($k=0; $k<=count($result_array); $k++) 
  24.             { 
  25.                 //echo $k;
  26.                 echo $result_array[$k]." | "; 
  27.             } 
  28.             //echo "<br />"; 
  29.             $j++; 
  30.         } 
  31.     } 
  32.     $i++; 
  33.     echo "<br />";
  34. } 
  35. echo " ";

  36. ?>
其他可用资源: 

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

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

 
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 "

ERROR - Could not connect to Oracle"; 
exit; 
}

 

 

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

$stmt = OCIParse($conn, $sql); 
if(!$stmt) { 
echo "

ERROR - Could not parse SQL statement."; 
exit; 
}

 

 

OCIExecute($stmt);

 

OCIFetchInto($stmt, &$total_rows);

if ( !$total_rows[0] ) { 
echo "

Error - no rows returned!"; 
exit; 
}

 

 

$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";

 
OCIFreeStatement($stmt);

$sql = "Select * from table_name";

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

if(!$stmt) { 
echo "

ERROR - Could not parse SQL statement."; 
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 "<< 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'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 "$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"; 
}

 

OCIFreeStatement($stmt); 
OCILogoff($conn);

?>

所有人都还在这里?很好,你完成了!这个方法可以被用在很多更深入的理解Oracle和PHP的能力上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值