PHP操作Oracle資料庫

來源:互聯網
上載者:User

標籤:

原文出處

(這是來自“百度文庫”中的文章寫得很不錯)

 
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()回退事務

<?phpoci_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資料庫連接

<?phpoci_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 "";    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語句中直接提供sysdateoci_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 "插入成功"."";        }}oci_free_statement($statement);oci_close($Oracle_conn);               ?>

 =======================PHP調用預存程序=========================    

<?php//串連資料庫        $Oracle_conn=oci_connect("scott","tiger","hy");/*定義調用語句(此處執行一個具有輸入參數和返回遊標的預存程序)預存程序的代碼如下:create or replace procedure get_emp_inf(v_deptno in emp.deptno%type,v_res out sys_refcursor)isbegin    open v_res for select * from emp where deptno=v_deptno;end get_emp_inf;預存程序的調用語句的寫法有:begin...end和call兩種寫法*///分配並返回一個遊標控制代碼$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");        /*定義調用語句(此處執行一個具有一個輸入參數的函數)        儲存函數的代碼如下:        /*        create or replace function chk_emp_exist        (v_empno emp.empno%type)        return int        as           v_num int;        begin        select count(rowid) into v_num from emp where empno=v_empno;        if v_num<>0 then            return 1;        else            return -1;        end if;        end;        儲存函數的調用語句的寫法有兩種寫法,第一種使用begin...end;,第二種可以在一個select語句中調用,但是僅限於沒有輸出參數的        */        //建立調用語句        $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);                        ?>

 

PHP操作Oracle資料庫

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.