PHP操作Oracle数据库

作者:源码世界时间:2014-06-27分类:PHP评论:0浏览:4645


PHP操作Oracle数据库(OCI数据抽象层)
OCI(Oracle 8 Call-Interface)是PHP中内置的数据库抽象层函数。
下面针对连接Oracle数据库操作数据库的常见任务举例说明:
=======================基本查询:无条件查询===================
1、数据库连接:函数:oci_connect()
函数:resource oci_connect ( string username, string password [, string db [, string charset [, int session_mode]]] )
说明:   函数的返回值为资源
           username、password:是Oracle的用户名密码,即方案名及密码
           db:是可选参数,如果使用本地的Oracle实例或者使用tnsnames.ora配置文件中注册的本地服务名,直接提供其名称即可。
           如果此参数留空,则使用本地的ORACLE_SID或者搜索tnsnames.ora文件的注册的默认本地服务名。
           charset:参数是在Oracle9.2以上的版本使用的参数,默认可以留空,使用NLS_LANG 环境变量替代。
           session_mode:用于设定使用特权身份登录(默认禁用),默认有3个选项:OCI_DEFAULT,OCI_SYSOPER 和 OCI_SYSDBA
范例:连接本机注册的本地服务名为hy的Oracle实例,用户名/密码为scott/tiger
           <?php
           //建立连接
           $conn=oci_connect("scott","tiger","hy");
           //检查连接是否成功
           if($conn){
               echo "connect success";
           }
           else{
               echo "connect error";
           }
           ?>
2、编译SQL语句:函数:oci_parse()
函数:resource oci_parse ( resource connection, string query )
说明:   函数返回值为资源,编译以字符串形式提供的SQL语句
           connection:为在第一步中创建的链接资源标识符
           query:是一个查询字符串,用双引号引起来。
           在 connection 上配置 query 并返回语句标识符以用于 oci_bind_by_name(),oci_execute() 以及其它函数
           <?php
           $stmt=oci_parse($conn,"select * from emp");
           ?>
3、执行SQL语句:函数:oci_execute();
函数:bool oci_execute ( resource stmt [, int mode] )
说明:   函数返回布尔值,执行一条之前被解析过的语句
           stmt:在第二步创建的编译资源名
           mode:允许定义执行模式,
                       OCI_COMMIT_ON_SUCCESS(默认):语句执行成功则自动提交
                       OCI_DEFAULT:自动建立一个事务,此事务会在连接关闭或者脚本结束自动回退,如果想提交,需要
                       明确调用oci_commit() 提交事务,或者调用oci_rollback()回退事务
           <?php
           oci_execute($stmt,OCI_DEFAULT);
           ?>
4、提取查询的结果:
   函数:   int oci_fetch_all ( resource statement, array &output [, int skip [, int maxrows [, int flags]]] )      
               提取所有的结果数据到数组(返回获取数据的行数)
               array oci_fetch_array ( resource statement [, int mode] )  
               提取结果数据的一行到一个关联数组(OCI_ASSOC)或者数字索引数组(OCI_NUM )或两者(OCI_BOTH)等
               array oci_fetch_assoc ( resource statement )  
               提取结果数据的一行到一个关联数组
               object oci_fetch_object ( resource statement )  
               提取结果数据的一行到一个对象
               array oci_fetch_row ( resource statement )          
               提取结果数据的一行到一个数字索引数组
           <?php
           $result=oci_fetch_assoc($stmt);
           print_r($result);
           ?>
5、释放资源:
   函数:   bool oci_free_statement ( resource statement )
               释放关联于语句或游标的所有资源
               bool oci_close ( resource connection )
               关闭 Oracle数据库连接
           <?php
           oci_free_statement($statement);
           oci_close($Oracle_conn);
           <?
=======================基本查询:有查询条件的查询===================
1、数据库连接(略)
2、编译SQL语句(略)
3、绑定变量及执行:
   函数:bool oci_bind_by_name ( resource stmt, string ph_name, mixed &variable [, int maxlength [, int type]] )
       将 PHP 变量 variable 绑定到 Oracle 的位置标志符 ph_name。length 参数确定该绑定的最大长度,如果要绑定一个
       抽象数据类型,使用type参数
       <?php      
       $Oracle_conn=oci_connect("scott","tiger","hy");
       $query="select * from emp where job=upper(:job) and deptno=upper(:deptno)";
       $statement=oci_parse($Oracle_conn,$query);
       //设置绑定变量的取值
       $job="CLERK";
       $deptno=10;
       oci_bind_by_name($statement,":job",$job);
       oci_bind_by_name($statement,":deptno",$deptno);
       //执行语句
       oci_execute($statement);
       //取得结果数据
       oci_fetch_all($statement,$result);
       foreach($result as $rows){
           echo "<br>";
           foreach($rows as $col_values){
           echo $col_values;  
           }
       }
       //释放资源
       oci_free_statement($statement);
       oci_close($Oracle_conn);
       ?>
=======================数据插入操作===================      
=======================1、通过变量提供值======================
1、数据库连接(略)
2、编译SQL语句(略)
3、绑定变量及执行:      
       <?php      
       $Oracle_conn=oci_connect("scott","tiger","hy");
       $query="insert into emps(empno,ename,sal,hiredate) values(:empno,:ename,:sal,:hiredate)";
       $statement=oci_parse($Oracle_conn,$query);
       //===============设置绑定变量的取值(通过变量提供值)================
       $empno=1203;
       $ename='TEST';
       $sal=1500;
       $hiredate='03-12月-81';//如果是使用Oracle数据库服务器时间,则在DML语句中直接提供sysdate
       oci_bind_by_name($statement,":empno",$empno);
       oci_bind_by_name($statement,":ename",$ename);
       oci_bind_by_name($statement,":sal",$sal);
       oci_bind_by_name($statement,":hiredate",$hiredate);
       //执行语句,设置执行模式为自动提交
       oci_execute($statement,OCI_COMMIT_ON_SUCCESS);
       //检查影响的行数
       if(oci_num_rows){
           echo "插入成功";
       }
       //释放资源
       oci_free_statement($statement);
       oci_close($Oracle_conn);
       ?>
=======================2、通过数组提供值======================
       <?php      
       $Oracle_conn=oci_connect("scott","tiger","hy");
       $query="insert into emps(empno,ename) values(:empno,:ename)";
       $statement=oci_parse($Oracle_conn,$query);
       //===============设置绑定变量的取值(通过数组提供值)================
       $data=array(
                           1884=>"a",
                           1885=>"b",
                           1886=>"c");
       oci_bind_by_name($statement,":empno",$empno,32);
       oci_bind_by_name($statement,":ename",$ename,32);
       foreach ($data as $empno => $ename) {
               if(oci_execute($statement)){
                   echo "插入成功"."<br>";
               }
       }
       oci_free_statement($statement);
       oci_close($Oracle_conn);              
       ?>
PHP操作Oracle数据库(OCI数据抽象层)(二)       
=======================PHP调用存储过程=========================   
        <?php
        //连接数据库       
        $Oracle_conn=oci_connect("scott","tiger","hy");
       
        //分配并返回一个游标句柄
        $cur=oci_new_cursor($Oracle_conn);
        //创建调用语句
        $query="call get_emp_inf(:deptno,:v_cur)";
        $statement=oci_parse($Oracle_conn,$query);
        //提供输入参数
        $deptno=10;
        //绑定游标句柄,接收返回的游标参数
        oci_bind_by_name($statement,":deptno",$deptno,16);
        oci_bind_by_name($statement,":v_cur",$cur,-1,OCI_B_CURSOR);
        //执行
        oci_execute($statement);
        //获取返回的游标数据到游标句柄
        oci_execute($cur);
        //遍历游标内容
        while ($dat = oci_fetch_row($cur)) {
            var_dump($dat);
        }
        oci_free_statement($statement);
        oci_close($Oracle_conn);               
        ?>
=======================PHP调用存储函数=========================
        <?php
        //连接数据库       
        $Oracle_conn=oci_connect("scott","tiger","hy");
       
        //创建调用语句
        $query="begin :res:=chk_emp_exist(:empno); end;";
        $statement=oci_parse($Oracle_conn,$query);
        //提供输入参数
        $empno=10;
        $res=-100;//返回值可能出现负值,所以初始化时用负值
        //绑定变量,接收返回的参数
        oci_bind_by_name($statement,":res",$res);
        oci_bind_by_name($statement,":empno",$empno);
        //执行
        oci_execute($statement);
        //判断是否存在
        if($res==1){
            echo "此员工存在";
        }
        else{
            echo "此员工不存在";
        }
        oci_free_statement($statement);
        oci_close($Oracle_conn);               
        ?>
       

如果您没有找到适合你的解决方案,请联系我们寻求帮助支付鼓励

返回顶部
分享按钮