熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

在LINUX環境中用PHP連接Oracle數據庫

2013-11-23 18:51:23  來源: Java核心技術 

  
  通過PHP你可以輕松的連接到數據庫請求數據並將其顯示在你的web站點中甚至修改數據庫中的數據MySQL是一種很流行的數據庫並且在互聯網中有許多有關PHP與MySQL的教程MySQL是免費的這一點也許就吸引了不少人由於其廣泛應用我就不想在這裡贅述MySQL的使用方法了Oracle被大量在企業應用中采用因此我們就利用Oracle來介紹PHP與數據庫的連接我們當然不會提及Oracle數據庫的設計原理原因是這已經超出了我們的討論范圍
  
  PHP提供了兩套函數與Oracle連接分別是ORA_和OCI函數其中ORA_函數略顯陳舊OCI函數更新據說更好一些兩者的使用語法幾乎相差無幾你的PHP安裝選項應該可以支持兩者的使用
  
  連接
  < ? if ($conn=Ora_Logon(user@TNSNAMEpassword))
  { echo SUCCESS ! Connected to database\n;
  }else
  {echo Failed :( Could not connect to database\n;}
  Ora_Logoff($conn);
  phpinfo();
  ?>
  
  以上代碼使用TNSNAME(在你的tnsnamesora文件中指明)定義的Oracle數據庫名稱用戶名稱和密碼連接數據庫在成功連接的基礎上ora_logon函數返回一個非零的連接ID並儲存在變量$conn中
  
  查詢
  假設與數據庫已經連接就緒下面我們就來實際的應用對數據庫的查詢下面的代碼演示了一個連接並查詢的典型例子
  
  function printoraerr($in_cur)
  {
  // 檢查Oracle是否出錯
  // 如果存在錯誤則顯示
  // 當指針被激活時每次請求Oracle後調用該函數
  if(ora_errorcode($in_cur))
  echo Oracle code ora_error($in_cur)\n;
  return;
  }
  if (!($conn=ora_logon(user@TNSNAMEpassword)))
  {echo Connection to database failed\n;
  exit;
  }
  echo Connected as connection $conn \n;
  echo Opening cursor \n;
  $cursor=ora_open($conn); printoraerr($cursor);
  echo Opened cursor $cursor \n;
  $qry=select usersysdate from dual;
  echo Parsing the query $qry \n;
  ora_parse($cursor$qry); printoraerr($cursor);
  echo Query parsed \n;
  echo Executing cursor \n;
  ora_exec($cursor); printoraerr($cursor);
  echo Executed cursor \n;
  echo Fetching cursor \n;
  while(ora_fetch($cursor))
  {
  $user=ora_getcolumn($cursor); printoraerr($cursor);
  $sysdate=ora_getcolumn($cursor); printoraerr($cursor);
  echo row = $user $sysdate \n;
  }
  echo Fetched all records \n;
  echo Closing cursor \n;
  ora_close($cursor);
  echo Closed cursor \n;
  echo Logging off from oracle \n;
  ora_logoff($conn);
  echo Logged off from oracle \n;
  ?>
  
  顯示結果
  以下代碼演示了怎樣查詢數據庫並將結果輸出
  
  function printoraerr($in_cur $conn)
  {
  // 檢查Oracle是否出錯
  // 如果存在錯誤則顯示
  // 當指針被激活時每次請求Oracle後調用該函數
  // If it encountered an error we exit immediately
  if(ora_errorcode($in_cur))
  {echo Oracle code ora_error($in_cur) n;
  ora_logoff($conn);
  exit;
  }
  return;
  }
  
  function exequery($w_qry$conn)
  {
  $cursor=ora_open($conn); printoraerr($cursor$conn);
  ora_parse($cursor$w_qry); printoraerr($cursor$conn);
  ora_exec($cursor); printoraerr($cursor$conn);
  $numrows=;
  $w_numcols=ora_numcols($cursor);
  // 顯示頭部
  echo \n;
  for ($i=;$i<$w_numcols;$i++)
  {
  $align=(ora_columntype($cursor$i)==NUMBER)?RIGHT:LEFT;
  echo \t ora_columnname($cursor$i) \n;
  }
  echo \n;
  while(ora_fetch($cursor))
  {
  echo \n;
  for ($i=;$i<$w_numcols;$i++)
  {
  $align=(ora_columntype($cursor$i)==NUMBER)?RIGHT:LEFT;
  if(ora_columntype($cursor$i)==LONG)
  echo
  ora_getcolumn($cursor$i) \n;
  else
  echo ora_getcolumn($cursor$i) \n;
  printoraerr($cursor$conn);
  }
  $numrows++;
  echo \n;
  }
  if ($numrows==)
  echo Query returned no records \n;
  else
  {
  echo \n;
  echo Count \n;
  echo $numrows \n;
  echo \n;
  }
  echo \n;
  ora_close($cursor);
  return;
  }
  // 主程序
  if(!($conn=ora_logon(user@SIDpassword)))
  {
  echo Error: Cannot connect to database\n;
  exit;
  }
  $qry=SELECT
  deptno \Dept\
  empno \Emp\
  empnm \Name\
  salary \Salary\
  FROM
  employee
  ORDER BY ;
  exequery($qry);
  ora_logoff($conn);
  ?>
  
  基於HTTP的Oracle登錄
  將以下代碼加在PHP頁面代碼之前以確認Oracle登錄注意你必須正確設定$ SID
  
  if(!isset($PHP_AUTH_USER))
  {
  Header(WWWauthenticate: basic realm=\$SID\);
  Header(HTTP/ Unauthorized);
  $title=Login Instructions;
  echo
  You are not authorized to enter the site
  \n;
  exit;
  }
  else
  {
  if (!($conn=ora_logon($PHP_AUTH_USER@$SID$PHP_AUTH_PW)))
  {Header(WWWauthenticate: basic realm=\$SID\);
  Header(HTTP/ Unauthorized);
  $title=Login Instructions;
  echo
  You are not authorised to enter the site
  \n;
  exit;
  }}
  ?>

From:http://tw.wingwit.com/Article/program/Java/hx/201311/25865.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.