php與oracle資料庫
㈠ Linux和Win安裝php和Oracle有何特點
在Linux和Windows上安裝PHP和Oracle時,重點在於簡化配置流程,確保無需設置不必要的Oracle變數,如ORACLE_HOME和ORACLE_SID。具體步驟如下:
在配置文件php.ini中,確保將OCI8擴展設為啟用狀態,即去掉注釋:extension=php_oci8.dll。同時,調整extension_dir指令至完整的PHP擴展DLL路徑。對於PHP 4,DLL位於軟體的"extensions"子目錄;PHP 5則位於"ext"目錄下。
重啟Apache伺服器。通過創建一個簡單的PHP腳本並將其放置於web伺服器可訪問的位置,來驗證擴展是否成功配置。使用瀏覽器訪問腳本的URL,頁面應顯示"OCI8 Support enabled",以此證明OCI8支持已啟用。
為了在Linux上添加Oracle連接,需要對PHP進行重新編譯。訪問開源開發者中心獲取關於在Linux上安裝Oracle、PHP和Apache的詳細指導,其中介紹了安裝傳統、完整Oracle 10g版本的方法(無需使用Instant Client)。
下載並安裝Apache。例如,在主目錄下安裝Apache:cd apache_1.3.31 ./configure --enable-mole=so --prefix=$HOME/apache --with-port=8888 make make install
編輯配置文件$HOME/apache/conf/httpd.conf,添加以下內容:AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps
㈡ PHP如何連接oracle資料庫
首先你要在php.ini文件中找到
extension=php_oci8.dll 前面的注釋符號「;」去掉,使php能夠載入支持oracle的模塊;
下面的代碼是調試通過的,可直接使用的:
<html>
<body>
<?php
$dbconn=OCILogon("root","pass","(DESCRIPTION=(ADDRESS=(PROTOCOL =TCP)(HOST=遠程IP)(PORT = 1521))(CONNECT_DATA =(SID=GZXNCW)))");
if($dbconn!=false)
{
echo "連接成功";
if(OCILogOff($dbconn)==true)
{
echo "關閉連接成功!";
}
}
else
{
echo "連接失敗";
}
?>
</body>
</html>
<?php
$dbconn=oci_connect("你的賬號","你的密碼","你的資料庫名稱");//請把中文件設置為你的值;
$stmt=oci_parse($dbconn, "select * from scott.hallo");
oci_execute($stmt, OCI_DEFAULT);
echo $conn."----selecting\n\n";
while (oci_fetch($stmt))
{
echo ($conn."[".oci_result($stmt, "TEST")."]\n\n");
}
echo ($conn . "----done\n\n");
?>
㈢ 程序PHP,資料庫ORACLE 連接方式PDO,日期欄位為DATE型,數據是2011-10-18;頁面輸出是11-10月-11
應該有兩種處理方式吧,oracle 的to_char(日期,『yyyy-mm-dd』)轉換為你想要的格式為字元串,直接用php 輸出。
或者是 把oracle的 時間轉換為時間戳然後 用PHP轉成你想要的格式吧
㈣ php及資料庫
PHP調用三種資料庫的方法
本文比較詳細的介紹PHP調用Mysql、ODBC以及ORACLE資料庫。
MySQL是一個小巧靈瓏的資料庫伺服器軟體,對於中、小型應用系統是非常理想的。除了支持標準的ANSI SQL語句外,最重要的是,它還支持多種平台,而在Unix/Linux系統上,MySQL支持多線程運行方式,從而能獲得相當好的性能。它和PHP、 Apache一樣,是屬於開放源代碼軟體。其官方網站是:,上面提供Windows,Linux,Unix版本的源代碼的下載。
注意,MySQL訪問函數都需要有相應的許可權才能運行。常用的相關函數介紹如下:
(1)integer mysql_connect(主機,用戶名,口令);
此函數開始一個對指定主機上的MySQL資料庫的連接。若該資料庫位於一個不同地埠,則在主機名後加上冒號和埠號。所有參數均為可選的,預設情況下分別對應為本地主機、用戶正在執行的腳本名和空。主機可以是IP地址或域名。
在腳本執行結束時,連接被自動關閉,也可以用mysql_close提前關閉。
(2)boolean mysql_create_db(資料庫名);
創建一個資料庫。注意必須用一個帶有創建資料庫許可權的帳號打開連接。
(3)boolean mysql_select_db(資料庫名,連接號);
選擇預設資料庫。
(4)integer mysql_query(SQL語句,連接號);
對指定資料庫進行查詢。如果SQL語句是select,則返回一個結果號,否則返回的值可以不理會。如果失敗,返回false.。
(5)array mysql_fetch_array(結果號);
取出下一行,返回一個數組.可以用數字下標訪問(第一個欄位是下標 0),也可以用字元串下標訪問(即使用各欄位名)。如已取了最後一行,返回 false.。
(6)mysql_fetch_row(結果號);
返回一個矩陣代表結果集中一行的所有域。每次調用都會產生下一行,直到沒有行剩下時返回false。每個域值都由一個從零開始的偏移量索引。這是從查詢中獲取結果的最快方法。
(7)integer mysql_num_rows(結果號);
返回結果集中行的數目
(8)integer mysql_num_fields(結果號);
返回結果集中域的數目。
(9)integer mysql_list_dbs();
向伺服器查詢資料庫列表。它返回一個結果指針,該指針可用於mysql_fetch_row函數及類似函數。
(10)mysql_list_tables(資料庫名);
獲取一個指向指定資料庫的表單列表的結果指針。該結果指針可用於任何從結果集中獲取行的函數。
(11)mysql_close(連接號);
關閉對資料庫的連接。連接必須是由mysql_connect打開的。該函數的使用不是嚴格必需的,因為在腳本結束時,所有非永久鏈路都會被自動關閉。
(12)mysql_pconnect(主機,用戶名,口令);
與mysql_connect完全相似,但建立一個"永久連接",該連接一經建立永不關閉,即使使用mysql_close函數或程序執行完畢也不關閉.下一次試圖建立永久連接時,系統如發現已存在一個永久連接,則直接返回該連接號而不重新創建。
下面是一個調用MYSQL資料庫並分頁顯示的例子。
<?
$pagesize = 5; //每頁顯示5條記錄
$host="localhost";
$user="user";
$password="psw";
$dbname="book"; //所查詢的庫表名;
//連接MySQL資料庫
mysql_connect("$host","$user","$password") or die("無法連接MySQL資料庫伺服器!");
$db = mysql_select_db("$dbname") or die("無法連接資料庫!");
$sql = "select count(*) as total from pagetest";//生成查詢記錄數的SQL語句
$rst = mysql_query($sql) or die("無法執行SQL語句:$sql !"); //查詢記錄數
$row = mysql_fetch_array($rst) or die("沒有更多的記錄!"); /取出一條記錄
$rowcount = $row["total"];//取出記錄數
mysql_free_result($rst) or die("無法釋放result資源!"); //釋放result資源
$pagecount = bcdiv($rowcount+$pagesize-1,$pagesize,0);//算出總共有幾頁
if(!isset($pageno)) {
$pageno = 1; //在沒有設置pageno時,預設為顯示第1頁
}
if($pageno<1) {
$pageno = 1; //若pageno比1小,則把它設置為1
}
if($pageno>$pagecount) {
$pageno = $pagecount; //若pageno比總共的頁數大,則把它設置為最後一頁
}
if($pageno>0) {
$href = eregi_replace("%2f","/",urlencode($PHP_SELF));//把$PHP_SELF轉換為可以在URL上使用的字元串,這樣的話就可以處理中文目錄或中文文件名
if($pageno>1){//顯示上一頁的褳接
echo "<a href="" . $href . "?pageno=" . ($pageno-1) . "">上一頁</a> ";
}
else{
echo "上一頁";
}
for($i=1;$i<$pageno;$i++){
echo "<a href="" . $href . "?pageno=" . $i . "">" . $i . "</a> ";
}
echo $pageno . " ";
for($i++;$i<=$pagecount;$i++){
echo "<a href="" . $href . "?pageno=" . $i . "">" . $i . "</a> ";
}
if($pageno<$pagecount){//顯示下一頁的褳接
echo "<a href="" . $href . "?pageno=" . ($pageno+1) . "">下一頁</a> ";
}
else{
echo "下一頁 ";
}
$offset = ($pageno-1) * $pagesize;//算出本頁第一條記錄在整個表中的位置(第一條記錄為0)
$sql = "select * from pagetest LIMIT $offset,$pagesize";//生成查詢本頁數據的SQL語句
$rst = mysql_query($sql);//查詢本頁數據
$num_fields = mysql_num_fields($rst);//取得欄位總數
$i = 0;
while($i<$num_fields){//取得所有欄位的名字
$fields[$i] = mysql_field_name($rst,$i);//取得第i+1個欄位的名字
$i++;
}
echo "<table border="1" cellspacing="0" cellpadding="0">";//開始輸出表格
echo "<tr>";
reset($fields);
while(list(,$field_name)=each($fields)){//顯示欄位名稱
echo "<th>$field_name</th>";
}
echo "</tr>";
while($row=mysql_fetch_array($rst)){//顯示本頁數據
echo "<tr>";
reset($fields);
while(list(,$field_name)=each($fields)){//顯示每個欄位的值
$field_value = $row[$field_name];
if($field_value==""){
echo "<td> </td>";
}
else{
echo "<td>$field_value</td>";
}
}
echo "</tr>";
}
echo "</table>";//表格輸出結束
mysql_free_result($rst) or die("無法釋放result資源!");//釋放result資源
}
else{
echo "目前該表中沒有任何數據!";
}
mysql_close($server) or die("無法與伺服器斷開連接!");//斷開連接並釋放資源
?>
開放資料庫連接(ODBC)已成為一種與資料庫進行通信的工業標准。PHP也提供了標準的介面,使得PHP能調用Access,SQL SERVER等資料庫。其相關函數是:
(1)integer odbc_connect(string dsn, string user, string password)
連接到一個ODBC資料庫源名字上。
(2)integer odbc_exec(integer connection, string query)或 odbc_do(integer connection, string query)
在一個連接上執行查詢。
(3)boolean odbc_fetch_row(integer result, integer row)
從一個結果集中獲取一行數據。Row參數是可選的,若為空缺,則返回下一個有效行。在結果集中不再剩餘行時返回false。
(4)boolean odbc_close(integer connection)
關閉一個資料庫的連接。若在該連接上有打開的事務,則返回一個錯誤,而且連接不會被關閉。
最後,還是看個分頁的例子:
<?
//設定每頁顯示條數
$show_num = 10;
$spages = $pages;//避免$pages後期被改變
//定義連接
$dsn = "localhost";
$user = "sa";
$password = "";
//計算總記錄數
$rs_num = "select count(*) as id from bbs where zu='0' and lei='".$lei."'";
$conn_id = odbc_connect($dsn,$user,$password);
$rnum = odbc_exec($conn_id,$rs_num);
while(odbc_fetch_row($rnum)){
$total_rs = odbc_result($rnum,"id");//將總記錄數放入$total_rs變數
}
//計算與頁有關的條數
$nnn = $total_rs / $show_num;//計算總頁數
$hnnn = intval($nnn);//將總頁數取整
$cnnnn = $nnn - $hnnn;
//計算所需總頁數
switch ($cnnn){
case "0":
$hnnn++;
$nnn = $hnnn;//總頁數
break;
default :
$nnn = $hnnn;//總頁數
break;
};
if ($nnn == 0)$nnn++;
//計算頁面改變所需的條件
$fore = $pages;
$next = $pages;
$fore -= 1;
$next += 1;
if ($fore > 0) {
echo "<a>首頁</a>";
echo "<a>前頁</a>";
};
if ($pages < $nnn) {
echo "<a>後頁</a>";
echo "<a>尾頁</a>";
};
echo "共".$nnn."頁";
$query_string = "SELECT * FROM table where condition order by you wanted order";
$cur = odbc_exec($conn_id,$query_string);
//取到循環的頂部
$cnum = ($pages-1) * $show_num;//計算當前的記錄游標的位置
//空循環到顯示記錄游標處
if ($cnum != 0){
for ($i=0;$i<=$cnum;odbc_fetch_row($cur));
};
$i=1;
//顯示記錄
while(odbc_fetch_row($cur)){
echo ;
if ($i == $show_num){//在不滿頁數時跳出程序
break;
};
$i++;
};
//關閉連接
odbc_close($conn_id);
?>
Oracle(甲骨文)是世界上最為流行的關系資料庫。它是大公司推崇的工業化的強有力的引擎。我們先看看其相關的函數:
(1)integer ora_logon(string user , string password)
開始對一個Oracle資料庫伺服器的連接。
(2)integer ora_open(integer connection)
打開給出的連接的游標。
(3)integer ora_do(integer connection, string query)
在給出的連接上執行查詢。PHP生成一個指示器,解析查詢,並執行之。
(4)integer ora_parse(integer cursor, string query)
解析一個查詢並准備好執行。
(5)boolean ora_exec(integer cursor)
執行一個先前由ora_parse函數解析過的查詢。
(6)boolean ora_fetch(integer cursor)
此函數會使得一個執行過的查詢中的行被取到指示器中。這使得您可以調用ora_getcolumn函數。
(7)string ora_getcolumn(integer cursor, integer column)
返回當前的值。列由零開始的數字索引。
(8)boolean ora_logoff(integer connection)
斷開對資料庫伺服器的鏈接。
以下是向ORACLE資料庫插入數據的示常式序:
<html>
<head><title>向ORACLE資料庫中插入數據</title></head>
<body>
<form action="<?echo $PHP_SELF;?>" method="post">
<table border="1" cellspacing="0" cellpadding="0">
<tr>
<th>ID</th>
<th>name</th>
<th>Description</th>
</tr>
<tr>
<td><input type="text" name="name" maxlength="50" size="10"></td>
<td><input type="text" name="email" maxlength="255" size="30"></td>
<td><input type="text" name="Description" maxlength="255" size="50"></td>
</tr>
<tr align="center">
<td colspan="3"><input type="submit" value="提交"><input type="reset" value="重寫"></td>
</tr>
</table>
</form>
<?
//先設置兩個環境變數ORACLE_HOME,ORACLE_SID
putenv("ORACLE_HOME=/oracle/app/oracle/proct/8.0.4");
putenv("ORACLE_SID=ora8");
//設置網頁顯示中文
putenv("NLS_LANG=Simplified_Chinese.zhs16cgb231280");
if($connection=ora_logon("scott","tiger")) {
//庫表test有ID,name,Description三項
$sql = 'insert into test(ID,name,Description) values ';
$sql .= '('' . $ID . '','' . $name . '',''. $Description . '')';
if($cursor=ora_do($connect,$sql)) {
print("insert finished!");
}
$query = 'select * from test';
if($cursor=ora_do($connect,$query)) {
ora_fetch($cursor);
$content0=ora_getcolumn($cursor,0);
$content1=ora_getcolumn($cursor,1);
$content2=ora_getcolumn($cursor,2);
print("$content0");
print("$content1");
print("$content2");
ora_close($cursor);
}
ora_logoff($connection);
}
?>
</body>
</html>
通過PHP你可以輕松的連接到資料庫,請求數據並將其顯示在你的web站點中,甚至修改資料庫中的數據。 MySQL是一種很流行的資料庫,並且在互聯網中有許多有關PHP與MySQL的教程。MySQL是免費的,這一點也許就吸引了不少人。由於其廣泛應用, 我就不想在這里贅述MySQL的使用方法了。Oracle被大量在企業應用中採用,因此我們就利用Oracle來介紹PHP與資料庫的連接。我們當然不會 提及Oracle資料庫的設計原理,原因是這已經超出了我們的討論范圍。
PHP提供了兩套函數與Oracle連接,分別是ORA_和OCI函數。其中ORA_函數略顯陳舊。OCI函數更新據說更好一些。兩者的使用語法幾乎相差無幾。如前所述,你的PHP安裝選項應該可以支持兩者的使用。
想獲得更多有關在Microsoft Windows平台上安裝支持PHP3的Apache伺服器的知識以及更多有關Oracle資料庫的知識,請查閱以下URL:。
4.1 連接
if ($conn=Ora_Logon("user@TNSNAME","password"))
{
echo "SUCCESS ! Connected to database\n";
}
else
{
echo "Failed :-( Could not connect to database\n";
}
Ora_Logoff($conn);
phpinfo();
?>
以上代碼使用TNSNAME(在你的tnsnames.ora文件中指明)定義的Oracle資料庫名稱、用戶名稱和密碼連接資料庫。在成功連接的基礎上,ora_logon函數返回一個非零的連接ID並儲存在變數$conn中。
4.2 查詢
假設與資料庫已經連接就緒,下面我們就來實際的應用對資料庫的查詢。下面的代碼演示了一個連接並查詢的典型例子:
/*
* 連接資料庫並執行查詢
*/
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@TNSNAME","password")))
{
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 user,sysdate from al";
echo "Parsing the query $qry ...
\n";
ora_parse($cursor,$qry,0); 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,0); printoraerr($cursor);
$sysdate=ora_getcolumn($cursor,1); 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";
?>
(譯者註:以上代碼段缺少注釋,請讀者參考PHP Manual的Oracle資料庫函數部分)
4.3 顯示結果
以下代碼演示了怎樣查詢資料庫並將結果輸出:
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,0); printoraerr($cursor,$conn);
ora_exec($cursor); printoraerr($cursor,$conn);
$numrows=0;
$w_numcols=ora_numcols($cursor);
// 顯示頭部
echo "
\n";
for ($i=0;$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=0;$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==0)
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@SID","password")))
{
echo "Error: Cannot connect to database\n";
exit;
}
$qry="SELECT
deptno \"Dept\"
,empno \"Emp\"
,empnm \"Name\"
,salary \"Salary\"
FROM
employee
ORDER BY 1,2";
exequery($qry);
ora_logoff($conn);
?>
(譯者註:以上代碼段缺少注釋,請讀者參考PHP Manual的Oracle資料庫函數部分)
4.4 基於HTTP的Oracle登錄
將以下代碼加在PHP頁面代碼之前以確認Oracle登錄。注意你必須正確設定$ SID。
if(!isset($PHP_AUTH_USER))
{
Header("WWW-authenticate: basic realm=\"$SID\"");
Header("HTTP/1.0 401 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("WWW-authenticate: basic realm=\"$SID\"");
Header("HTTP/1.0 401 Unauthorized");
$title="Login Instructions";
echo "
You are not authorised to enter the site
\n";
exit;
}
}
?>
㈤ 用PHP操縱Oracle的LOB類型的數據
《PHP+Oracle(OCI) 初步》中講了如何用PHP中的OCI函數來連接Oracle資料庫 執行一些SQL查詢及關閉資料庫連接 本文將講述另一個難度稍大的問題 用PHP的OCI函數來操縱Oracle的LOB欄位 閱讀本文需要《PHP+Oracle(OCI) 初步》一文中的知識用過Oracle的人都知道 Oracle有一種數據類型叫VARCHAR 用來表示不定長的字元串 VARCHAR 也是Oracle公司推薦使用的類型 但使用VARCHAR 有個問題 最大隻能表示 個字元 也就相當於 個漢字 如果你的程序中某個字元的值要大於 個漢字 用VARCHAR 就不能滿足要求了 這時候 你有兩個選擇 一是用多個VARCHAR 來表示 二是用LOB欄位 這里我們來看看第二個辦法
先來大體了解一下Oracle的LOB欄位 Oracle的LOB類型分為三種 BLOB CLOB和BFILE CLOB稱為字元LOB BLOB和BFILE是用來存儲二進制數據的 CLOB和BLOB的最大長度是 GB 它們把值存放在Oracle資料庫中 BFILE和BLOB類似 但它把數據放在外部的文件中 所以它又稱為外部BLOB(External BLOB) 我想 我們對MYSQL應該都不會陌生 MYSQL中也有類似的數據類型 如TEXT和BLOB 在PHP的MYSQL函數中 對TEXT/BLOB的操作是直接的 就象其它類型的數據一樣 但在Oracle中 情況就不一樣了 Oracle把LOB當作一種特殊的數據類型來處理 在操作上不能用常規的方法 比如 不能在INSERT語句中直接把值插入到LOB欄位中 也不能用LIKE進行查找
下面就通過幾個例子來說明如何用PHP的OCI函數來插入 取出和查詢LOB數據
一 插入
不能直接用INSERT語句向LOB欄位中插入值 一般情況下 有如下的幾步 .先分析一個INSERT語句 返回一個LOB的描述符 .用OCI函數生成一個本地的LOB對象 .將LOB對象綁定到LOB描述符上 .執行INSERT語句 .給LOB對象賦值 .釋放LOB對象和SQL語句句柄
下面的這個例子是把用戶上傳的圖片文件存放到BLOB(或BFILE中 操作稍蠢物有不同)中 首先要建一個表 結構如下 CREATE TABLE PICTURES ( ID NUMBER DESCRIPTION VARCHAR ( ) MIME VARCHAR ( ) PICTURE BLOB ); 如果要實現ID的自動增加 再建一個SEQUENCE: CREATE SEQUENCE PIC_SEQ;
然後是用來處理數據的PHP程帶判液序代碼 <?php //建立Oracle資料庫連接 $conn = OCILogon($user $password $SID); //提交SQL語句給Oracle //在這里要注意的兩點 一是用EMPTY_BLOB()函數 這是Oracle的內部函數 返回一個LOB的定位符 在插入LOB時 只能用這個辦法先生成一個空的LOB定位符 然後對這個定位符進行操作 EMPTY_BLOB()函數是針對BLOB類型的 對應於CLOB的是EMPTY_CLOB() 二是RETURNING後面的部分 把picture返回 讓PHP的OCI函數能夠處理 $stmt = OCIParse($conn INSERT INTO PICTURES (id description picture) VALUES (pic_seq NEXTVAL $description $lob_upload_type EMPTY_BLOB()) RETURNING picture INTO :PICTURE ); //生成一個本地LOB對象的描述符 注意函數的第二個沖滾參數 OCI_D_LOB 表示生成一個LOB對象 其它可能的還有OCI_D_FILE和OCI_D_ROWID 分別對應於BFILE和ROWID對象 $lob = OCINewDescriptor($conn OCI_D_LOB); //將生成的LOB對象綁定到前面SQL語句返回的定位符上 OCIBindByName($stmt :PICTURE &$lob OCI_B_BLOB); OCIExecute($stmt); //向LOB對象中存入數據 因為這里的源數據是一個文件 所以直接用LOB對象的savefile()方法 LOB對象的其它方法還有 save()和load() 分別用來保存和取出數據 但BFILE類型只有一個方法就是save() if($lob >savefile($lob_upload)){ OCICommit($conn); echo 上傳成功<br> ; }else{ echo 上傳失敗<br> ; } //釋放LOB對象 OCIFreeDesc($lob); OCIFreeStatement($stmt); OCILogoff($conn);
?>
還有一個要注意的地方 LOB欄位的值最少要 個字元 所以在save()或savefile()之前 要確保值不能為空 否則 Oracle會出錯
二 取出
對一個LOB中取出數據 有兩種辦法 一是生成一個LOB對象 然後綁定到一條SELECT語句返回的定位符上 再用LOB對象的load()方法取出數據 二是直接用PHP的OCIFetch***函數 第一種方法比第二種方法要麻煩得多 所以我直接說說第二種方法 還是用上面的表
<?php $conn = OCILogon($user $password $SID); $stmt = OCIParse($conn SELECT * FROM PICTURES WHERE ID=$pictureid ); OCIExecute($stmt); //秘密就在PCIFetchInfo的第三個參數上 OCI_RETURN_LOBS 第三個參數是FETCH的模式 如果OCI_RETURN_LOBS 就直接把LOB的值放到結果數組中 而不是LOB定位符 也就不用LOB對象的load()方法了 if (OCIFetchInto($stmt $result OCI_ASSOC+OCI_RETURN_LOBS)) { echo Content type: StripSlashes($result[MIME]); echo StripSlashes($result[PICTURE]); } OCIFreeStatement($stmt); OCILogoff($conn); ?>
這個程序用來顯示放在LOB中的數據(圖片) 調用方法(假設腳本名是getpicture php) <IMG SRC= getpicture php?pictureid= ALT= 放在Oracle LOB中的圖片 >
三 查詢
前面已經提了下 對於Oracle的LOB欄位是不能用LIKE進行匹配的 怎麼辦呢?其實並不復雜 Oracle有一個匿名的程序包 叫DBMS_LOB 裡面有所有的操作LOB所需的過程
假設有象這樣一個表: CREATE TABLE ARTICLES ( ID NUMBER TITLE VARCHAR ( ) CONTENT CLOB );
文章的內容放在CONTENT欄位中
現在我們要找出所以內容中包含 PHP中文用戶 的文章 可以這么來做
<?php $conn = OCILogon($user $password $SID); //WHERE子句中用了DBMS_LOB INSTR過程 它有四個參數 前面兩個分別表示LOB的定位符(可以直接用欄位表示)和要查找的字元串 後面兩個分別表示開始的偏移量和出現的次數 要注意的是必須判斷它的返回值 也就是要大於 $stmt = OCIParse($conn SELECT * FROM ARTICLES WHERE DBMS_LOB INSTR(CONTENT PHP中文用戶 ) > ); OCIExecute($stmt); if (OCIFetchInto($stmt $result OCI_ASSOC+OCI_RETURN_LOBS)) { } OCIFreeStatement($stmt); OCILogoff($conn); ?>
Oracle還提供了許多用來操作LOB數據的過程 如LENGTH SUBSTR等等 至於它們的詳細用法 可以考慮Oracle的開發手冊
lishixin/Article/program/PHP/201311/21377
㈥ php,pdo怎麼連接oracle資料庫
php有強大的功能不但可以支持mysql,mssql,mysqli之個我們還可以與oracle數據連接,要讓php支持oracle非常的簡單我們只要把php.ini中的;extention = php_oci8.dll分號去掉即可.
請先安裝oracle的客戶端,能夠用客戶端訪問oracle。
php支持oracle連接函數
php.ini文件中的配置,去掉 ;extention = php_oci8.dll,去掉前面的分號,重啟apache就可以了,如果不行,我們再把php目錄中的php_oci8.dll拷到windows系統的system32下面去吧.
oracle資料庫建立鏈接,代碼如下:
$conn=oci_connect('username','password',"(DEscriptION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.100)(PORT=1521))(CONNECT_DATA=(SID=test)))");
㈦ PHP怎麼連接並操作遠程ORACLE資料庫
putenv ("ORACLE_BASE=/ora");
putenv ("ORACLE_HOME=/ora");
putenv("NLS_LANG=AMERICAN");
//$conn = Ora_PLogon("hostname","passwd");
$conn = Ora_PLogon("web@web","web");
@ora_commiton($conn);
$cur=ora_open($conn);
$err_no=0;
$query = "select PASSWORD from register where mobilno='$t_tele_num'";
$result=ora_parse($cur,$query);
$result=ora_exec($cur);
if(ora_fetch($cur))
$datacount = ora_getcolumn($cur, 0);
echo "$datecount";
ora_close($cur);
㈧ php可以支持目前主流的資料庫
php支持的資料庫有很多噢,下面列舉一下!
MySQL
MySQL 是最流行的關系型資料庫管理系統,在 WEB 應用方面 MySQL 是最好的 RDBMS(Relational Database Management System:關系資料庫管理系統)應用軟體之一。
MsSql
ms SQL是指微軟的SQLServer資料庫伺服器,它是一個資料庫平台,提供資料庫的從伺服器到終端的完整的解決方案,其中資料庫伺服器部分,是一個資料庫管理系統,用於建立、使用和維護資料庫。
Oracle
oracle是甲骨文公司的一款關系資料庫管理系統。它是在資料庫領域一直處於領先地位的產品。可以說Oracle資料庫系統是目前世界上流行的關系資料庫管理系統,系統可移植性好、使用方便、功能強,適用於各類大、中、小、微機環境。它是一種高效率、可靠性好的、適應高吞吐量的資料庫方案。
Access
Access是由微軟發布的關系資料庫管理系統。它結合了 MicrosoftJet Database Engine 和 圖形用戶界面兩項特點,是 Microsoft Office 的系統程序之一。
PostgreSQL
PostgreSQL是一種特性非常齊全的自由軟體的對象-關系型資料庫管理系統(ORDBMS),是以加州大學計算機系開發的POSTGRES,4.2版本為基礎的對象關系型資料庫管理系統。POSTGRES的許多領先概念只是在比較遲的時候才出現在商業網站資料庫中。
InterBase
InterBase是一種關系數據管理系統(Relational database management system RDBMS),它提供了在單機或多用戶環境中的快速數據處理及共享的工具。InterBase的核心是提供透明的多機種支持的網路運行伺服器技術。InterBase是可以在Windows 95、Windows NT、Novell NetWare及多種UNIX操作系統上運行的工具。
CUBRID
CUBRID是一個全面開源,且完全免費的關系資料庫管理系統。
dBase
dBase是第一個在個人電腦上被廣泛使用的單機版資料庫系統。
Firebird/InterBase
Firebird特性介紹firebird是一個全功能的,強大高效的,輕量級,免維護的資料庫。
IBM DB2
IBM DB2 是美國IBM公司開發的一套關系型資料庫管理系統
Informix
Informix是IBM公司出品的關系資料庫管理系統(RDBMS)家族。
MaxDB
MaxDB是一種企業級資料庫管理系統。
MongoDB
MongoDB 是一個基於分布式文件存儲的資料庫。
mSQL
mSQL(mini SQL)是一個單用戶資料庫管理系統,個人使用免費,商業使用收費。由於它的短小精悍,使其開發的應用系統特別受到互聯網用戶青睞。
SQLite
SQLite,是一款輕型的資料庫,是遵守ACID的關系型資料庫管理系統,它包含在一個相對小的C庫中。
SQLSRV
SQL Server(SQLSRV )是由Microsoft開發和推廣的關系資料庫管理系統(RDBMS)。
Sybase
美國Sybase公司研製的一種關系型資料庫系統,是一種典型的UNIX或WindowsNT平台上客戶機/伺服器環境下的大型資料庫系統。
tokyo_tyrant
一個可持久化數據的,好處是速度不錯,而且大至兼容Memcached的文本協議,客戶端可以繼續使用SpyMemcached。
希望對你有幫助,謝謝採納!