PHP使用Oracle数据库

oracle|数据|数据库

【摘 要】 HP提供了2大类API(应用程序接口)来操作Oracle数据库。一个是标准的Oracle处理函数(ORA) 另一个是Oracle 8调用接口函数(OCI8). 后者只能在Oracle 7或8版本上使用。 由于OCI8 提供了很多优化选项,因此只要有可能就应该采用 OCI8 接口。
在php3.0以上版本中,php内置了几乎目前所有的数据库处理函数,包括Oracle;在本文中我们通过一个实例来介绍了如何使用这些函数来操作Oracle数据库。

PHP提供了2大类API(应用程序接口)来操作Oracle数据库。一个是标准的Oracle处理函数(ORA) 另一个是Oracle 8调用接口函数(OCI8). 后者只能在Oracle 7或8版本上使用。 由于OCI8 提供了很多优化选项,因此只要有可能就应该采用 OCI8 接口。这里我们分别用这二种函数集进行了演示。

首先本文的前提假设你已经装好了 Oracle数据库环境 和 PHP 开发环境.  如果不懂也没多大关系,网上有很多相关的好文章可以参考。

第一步:创建 一个实验用的数据库

这个问题你可以请你的数据库管理员或参考Oracle用户手册处理,这里不再多讲

用 ORA 建立数据表

即使你已经创建好了数据表,也请看看本段文字。它可以告诉你如何用PHP+SQL的技术操作Oracle

在本例中我们创建了一个用于存放个人email的数据表

相关PHP代码:

PutEnv("ORACLE_SID=ORASID");
$connection = Ora_Logon ("username", "password");
if ($connection == false){
  echo Ora_ErrorCode($connection).": ".Ora_Error($connection)."";
  exit;
}  
$cursor = Ora_Open ($connection);
if ($cursor == false){
  echo Ora_ErrorCode($connection).": ".Ora_Error($connection)."";
  exit;
}  
$query = "create table email_info " .
       "(fullname varchar(255), email_address varchar(255))";
$result = Ora_Parse ($cursor, $query);
if ($result == false){
  echo Ora_ErrorCode($cursor).": ".Ora_Error($cursor)."";
  exit;
}
$result = Ora_Exec ($cursor);
if ($result == false){
  echo Ora_ErrorCode($cursor).": ".Ora_Error($cursor)."";
  exit;
}
Ora_Commit ($connection);
Ora_Close ($cursor);
Ora_Logoff ($connection);
?> 

为了处理Oracle数据库,我们首先要和Oracle建立一个联结。
语法是 Ora_Logon (user, password),返回一个connectID.. 
提醒: 在此之前我们还必须设置环境变量: ORACLE_SID的值.

现在,我们可以通过该联结的 ID对Oracle进行交互式操作了。数据表名字就叫email_info吧。该表由2个域组成,一个存储个人全名,(如:晓月)一个存储email地址如(xiaoyue@163.net)

还需要一个游标 Ora_Open.  该游标常常用来枚举数据。我们用 Ora_Parse 或 Ora_Exec 查询Oracle的结果集.  Ora_Parse 效验SQL语法正确性 而 Ora_Exec 则执行相应的SQL语句.  如果这一切都正常运行,那么我们就运行 Ora_Commit来确认.

Create A Table Using OCI

下面我们将建立一个email个人信息簿。这次采用OCI8 API指令

相关PHP代码:

<?php

PutEnv("ORACLE_SID=ORASID");

$connection = OCILogon ("username", "password");
if ($connection == false){
   echo OCIError($connection)."
";
   exit;
}   

$query = "create table email_info " .
              "(fullname varchar(255), email_address varchar(255))";

$cursor = OCIParse ($connection, $query);
if ($cursor == false){
   echo OCIError($cursor)."
";
   exit;
}

$result = OCIExecute ($cursor);
if ($result == false){
   echo OCIError($cursor)."
";
   exit;
}

OCICommit ($connection);
OCILogoff ($connection);

?>

我们可以看到这2段代码语法几乎都一样,区别仅仅函数名字不同; 其次,在OCI8中我们不需要专门运行打开游标的指令,在调用 OCIParse 系统就自动返回了一个游标ID.

利用 ORA 向数据表 'email_info' 输入数据

当用户浏览这段脚本时,显示一个由姓名、email输入域组成的表单;当用户添好数据点击提交时,脚本程序将把这姓名、email保存到'email_info'数据表中。

相关PHP代码:

<?php

if ($submit == "click"){
  // The submit button was clicked!
  // Get the input for fullname and email then store it in the database.
  PutEnv("ORACLE_SID=ORASID");

  $connection = Ora_Logon ("username","password");
  if ($connection == false){
    echo Ora_ErrorCode($connection).": ".Ora_Error($connection)."
";
    exit;
  }

$cursor = Ora_Open ($connection);
if ($cursor == false){
  echo Ora_ErrorCode($connection).": ".Ora_Error($connection)."
";
  exit;
}   

  $query = "insert into email_info values ('$fullname', '$email')";
  $result = Ora_Parse ($cursor, $query);
  if ($result == false){
    echo Ora_ErrorCode($cursor).": ".Ora_Error($cursor)."
";
    exit;
  }

  $result = Ora_Exec ($cursor);
  if ($result == false){
    echo Ora_ErrorCode($cursor).": ".Ora_Error($cursor)."
";
     exit;
  }

  Ora_Commit ($connection);
  Ora_Close ($cursor);
  Ora_Logoff ($connection);
}
else{
  echo '
    

     <FORM action=insert.php method=post>

    请输入姓名
    <INPUT name=fullname></INPUT>

    请输入Email地址
    <INPUT name=email></INPUT>

    <INPUT name=submit type=submit value=click></INPUT>       

    </FORM>

    
  ';
}

?>

对了,这段脚本必须存为insert.php,因为在调用的页面中指定insert.php为表单处理程序

浏览效果:

请输入姓名
请输入Email地址

利用OCI向数据表 'email_info' 输入数据

同上,只不过用OCI来写

相关PHP代码:

<?php

if ($submit == "click"){
  // The submit button was clicked!
  // Get the input for fullname and email then store it in the database.
  PutEnv("ORACLE_SID=ORASID");

  $connection = OCILogon ("username","password");
  if ($connection == false){
    echo OCIError($connection)."
";
    exit;
  }

  $query = "insert into email_info values ('$fullname', '$email')";
  $cursor = OCIParse ($connection, $query);
  if ($cursor == false){
    echo OCIError($cursor)."
";
    exit;
  }

  $result = OCIExecute ($cursor);
  if ($result == false){
    echo OCIError($cursor)."
";
    exit;
  }

  OCICommit ($connection);
  OCILogoff ($connection);
}
else{
  echo '
    

     <FORM action=insert.php method=post>

    请输入姓名
    <INPUT name=fullname></INPUT>

    请输入 Email 地址
    <INPUT name=email></INPUT>

    <INPUT name=submit type=submit value=click></INPUT>       

    </FORM>

    
  ';
}

?>

对了,这段脚本必须存为insert.php,因为在调用的页面中指定insert.php为表单处理程序

浏览效果:

请输入姓名
请输入Email地址

利用ORA列出全部数据表'email_info'中的数据

下面,我们将逐条读出数据库的内容,并以html表格形式显示'email_info'数据表中的数据

相关PHP代码:

<?php

PutEnv("ORACLE_SID=ORASID");

$connection = Ora_Logon ("username","password");
if ($connection == false){
  echo Ora_ErrorCode($connection).": ".Ora_Error($connection)."
";
  exit;
}

$cursor = Ora_Open ($connection);
if ($cursor == false){
  echo Ora_ErrorCode($connection).": ".Ora_Error($connection)."
";
  exit;
}   

$query = "select * from email_info";
$result = Ora_Parse ($cursor, $query);
if ($result == false){
  echo Ora_ErrorCode($cursor).": ".Ora_Error($cursor)."
";
  exit;
}

$result = Ora_Exec ($cursor);
if ($result == false){
  echo Ora_ErrorCode($cursor).": ".Ora_Error($cursor)."
";
  exit;
}

echo "

Full Name Email Address
$name $email

";

Ora_Close ($cursor);
Ora_Logoff ($connection);

?>

程序运行的浏览效果如下所示:

 
姓名 Email 地址
春花 springflower@163.com
秋月 autumnmoon@163.com
... ...

 

利用OCI列出全部数据表'email_info'中的数据

同上,只不过用OCI来写

相关PHP代码:

<?php

PutEnv("ORACLE_SID=ORASID");

$connection = OCILogon ("username","password");
if ($connection == false){
  echo OCIError($connection)."
";
  exit;
}

$query = "select * from email_info";
$cursor = OCIParse ($connection, $query);
if ($cursor == false){
  echo OCIError($cursor)."
";
  exit;
}

$result = OCIExecute ($cursor);
if ($result == false){
  echo OCIError($cursor)."
";
  exit;
}

echo "

Full Name Email Address
$name $email

";

OCILogoff ($connection);

?>

程序运行的浏览效果如下所示:

 
姓名 Email 地址
春花 springflower@163.com
秋月 autumnmoon@163.com
... ...

 

时间: 2024-08-31 02:45:56

PHP使用Oracle数据库的相关文章

oracle 数据库 关于使用类型的问题

问题描述 oracle 数据库 关于使用类型的问题 我定义了 一个类型 和一个嵌套表 如下create or replace type typ_point1 AS OBJECT( 代码1 varchar(3) 代码2 varchar(8) 代码3 Timestamp....ect );create or replace TYPE typ_point1newt as table of typ_point1new; CREATE TABLE ""C##GAOMIAO""

Oracle数据库备份技巧

  利用下面的列出的技巧来确保你不会在每周一次的数据库备份过程中忘记关键步骤. 每周一次备份主数据库.如果你创建.修改或者停止一个数据库,添加新的SQL Server消息,添加或者停止连接服务器,或者添加记录设备,那就进行手工备份. 每天备份一次msdb数据库.它一般非常小,但很重要,因为它包含了所有的SQL Server工作.操作和计划任务. 只有当你修改它时,才有必要备份模型数据库. 用SQL Server Agent来安排你的备份工作的时间表. 如果在你的生产(production)环境中

哪位大神指导一下,关于Oracle数据库中类型varchar2(2) 存储汉字的问题

问题描述 哪位大神指导一下,关于Oracle数据库中类型varchar2(2) 存储汉字的问题 大神们跪求招数:orcale数据库中的一个字段YXQDW(有效期单位) 类型varchar2(2) 才两字节 用来存一个汉字,比如"年",我的项目(C#)一个汉字占用3个字节, 写SQL语句 insert不进去啊,提示字段范围超出了.难不成要像blob字段那样写?或者有什么更好的方式能将该字段插入呢?万分感激! 解决方案 可以换成nvarchar(2),这个是可变长度

oracle数据库性能调优技术:深入理解单表执行计划

一.概述 这篇文章是数据库性能调优技术的第二篇.上一篇讲解的索引调优是数据库性能调优技术的基础.这篇讲解的深入理解单表执行计划,是数据库性能调优的有力工具. 查询语句可以有多种可选执行计划,如何选择效率最高的执行计划?达梦数据库.oracle数据库.sql server数据库都是采用基于成本的查询优化,对备选执行计划进行打分,选择大家最小的执行计划进行执行.这些内容,我会在后续的几篇文章中进行详细的描述.在此之前,我们首先需要掌握如何理解数据库执行计划.这篇文章讲解只涉及单表操作的执行计划. 达

sql-我要写一个java程序,去链接oracle数据库,如果获取链接的时间超过1分钟,就抛出异常,请问怎么实现?

问题描述 我要写一个java程序,去链接oracle数据库,如果获取链接的时间超过1分钟,就抛出异常,请问怎么实现? 我要写一个java程序,去链接oracle数据库,如果获取链接的时间超过1分钟,就抛出异常,请问怎么实现? 解决方案 http://blog.chinaunix.net/uid-20752328-id-3451931.html 这里有一篇文章可以解决你的问题你可以点击进去看看; 如果回答对您有帮助请采纳 解决方案二: 说明数据整理不合理吧 解决方案三: 你应该优化数据库结构,或你

更改Oracle数据库表的表空间

oracle|数据|数据库 在Oracle数据库管理系统中,创建库表(table)时要分配一个表空间(tablespace),如果未指定表空间,则使用系统用户确省的表空间. 在Oracle实际应用中,我们可能会遇到这样的问题.处于性能或者其他方面的考虑,需要改变某个表或者是某个用户的所有表的表空间.通常的做法就是首先将表删除,然后重新建表,在新建表时将表空间指定到我们需要改变的表空间.如果该用户已经保存了大量数据,这种办法就就显得不是很方便,因为有大量数据需要提前备份出来.下面介绍一种利用数据库

Oracle数据库查询响应时间的计算公式问题

问题描述 Oracle数据库查询响应时间的计算公式问题 前提条件 1.一个上亿级的数据表(t1),有字段客户memberid,产品productid. 2.查询语句select memberid,productid from t1 where memberid='' and productid='' 问题 1.没有建index,查询返回结果集时间S,记录条数N的计算公式? 2.建立索引(memberid,productid),那么查询返回结果集时间S,记录条数N的计算公式?

plsql developer-如何访问另一台计算机中的oracle数据库

问题描述 如何访问另一台计算机中的oracle数据库 有两台笔记本,一个配置高一些,安装了Oracle数据库,另一台配置低一些,没有安装,该怎么配置可以使用plsql developer工具访问高配置电脑中的数据库呢?求大神解答,详细一点哈!本人有点笨,不胜感激! 解决方案 参考:http://blog.csdn.net/metal1/article/details/41799669http://www.jb51.net/article/48676.htm 解决方案二: 首先oracle数据库得

全面认识Oracle数据库字符集

    什么是Oracle字符集    Oracle字符集是一个字节数据解释的符号集合,有大小之分,有相互的包容关系.    Oracle支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据.它使数据库工具,错误消息,排序次序,日期,时间,货币,数字和日历自动适应本地化语言和平台.    影响oracle数据库字符集最重要的参数是NLS_LANG参数.它的格式如下:    NLS_LANG = language_territory.charset    它有三个组成部分(语言.地域和

Oracle数据库学习之第一篇

  权限管理: oracle 9里面默认的三个用户名和密码: sys change_on_install //权限最高的管理员 system manager //普通的管理员 scott tiger //普通用户 在oracle 10中,仍然使用这三个用户作为默认用户.但sys和system用户的密码不再默认.在安装数据库的时候,可以由用户指定 .从安全角度考虑,scott用户默认被锁定,所以要使用该用户,需要先解除锁定. 注意:我们要使用oracle数据库,至少要启动两个服务,一个是监听服务,