phpoci安裝
『壹』 oracle資料庫在mac osx 10.11.1 怎麼安裝
10g 試用版附帶了有幫助的文檔,通過 Oracle Universal Installer 安裝的,因此應首先解壓縮下載的文件。打開一個終端窗口,進入下載文件所在的目錄(可能是 ~/Desktop 或 ~/Documents),執行下列命令:
$ ls MAC_DB_SERVER*
如果文件最後的擴展名為 .cpio.gz,則請運行下列命令將其解壓縮。如果它最後為 .cpio,則說明您的瀏覽器已經對該文件進行了解壓縮,您可以跳過下一步驟。
$ gunzip MAC_DB_SERVER.cpio.gz
接下來,從 cpio 存檔解壓縮安裝磁碟(您可以在 -idm 之後添加 v 以便在解壓縮時看到文件列表)。
$ cpio -idm < MAC_DB_SERVER.cpio
您將位於一個名為 Disk1 的目錄中。要在默認 Web 瀏覽器中閱讀該文檔,請運行下列命令:
$ open Disk1/doc/unixdoc/index.htm
單擊「Quick Installation Guide for Apple MAC OS X」鏈接。雖然從名稱上看是快速安裝指南,但實際上這是一個詳細的指南,介紹了准備系統以及運行 Oracle Universal Installer 涉及的所有步驟。如果您以前從未安裝過 Oracle,或者使用下面的說明遇到了問題,則請花些時間通讀此指南。我還會在下面說明的各階段告訴您參考該指南的一些章節以了解更多詳細信息。
雖然該指南建議以 root 用戶通過 su - root 運行 shell,但是在 Mac OS X 上,默認情況下並不會啟用 root 用戶,該命令會提示您輸入一個並不存在的密碼。您可以通過 sudo 使用 root 許可權運行命令(如 sudo command),也可以使用 sudo su - 通過 sudo 啟動一個 root shell。
准備系統
資料庫應該由專用用戶帳戶安裝和運行,該帳戶通常名為 oracle。如果您已經安裝了 9iR2 開發人員版本(請參閱我以前的文章),則可能在系統上已經具有了 oracle 帳戶。請參閱 Quick Installation Guide 上的「Create Required Unix groups and user」部分來創建或更新 oracle 用戶以及 OSDBA 和 Oracle Inventory 組。您可以通過運行下列命令進行檢查,以確定是否已經正確配置該用戶:
$ id oracle
uid=1521(oracle) gid=1523(oinstall) groups=1523(oinstall), 80(admin), 1521(dba) [[should be only one line]]
如果您看到一個如上所示的組列表,則說明您的 oracle 用戶可以執行安裝了。請注意,您在組列表中看到的 uid、gid 數字可能有所不同。
接下來,您需要決定在哪裡存放資料庫應用程序和數據文件。因為此安裝是用於開發人員系統的,所以為了簡單起見,我選擇了放棄 Oracle 的最佳靈活體系結構。打開另一個終端窗口,輸入下列命令:
$ sudo su - oracle
$ mkdir 10gEAR2
此命令將以 oracle 用戶啟動一個 shell,並創建 /Users/oracle/10gEAR2 目錄,該目錄將用作此安裝的 $ORACLE_BASE。如果計算機具有多個磁碟,則可能還希望在另外一個磁碟上創建一個存放數據文件的目錄。Oracle 建議將應用程序和數據文件分開以獲得最佳性能。
接下來,您需要檢查幾個內核參數,確保這些內核參數已設置為 Oracle 的推薦值或比這些值還高。有關詳細信息,請參閱 Quick Install Guide 的「Configure Kernel Parameters」部分。例如,在我的系統上,除了兩個參數之外,其他參數均設置為推薦值,因此我使用管理員帳戶切換回該終端,然後更改了這兩個參數,如下所示:
$ sudo sysctl -w kern.maxproc=2068
$ sudo sysctl -w kern.maxprocperuid=2068
為了確保在重新啟動之後能夠保持這些更改,我在 /etc/sysctl.conf 文件中添加了下面兩行內容:
$ cat /etc/sysctl.conf
kern.maxproc=2068
kern.maxprocperuid=2068
接下來,您需要確保 shell 限制設置得足夠高。Quick Install Guide 建議編輯 /etc/rc 文件以及 /System/Library/StartupItems/IPServices/IPServices 文件。在清單 1 和清單 2 中有這些文件編輯過的版本。我建議按照下列方式替換這些內容:
$ cd /tmp
$ vi rc #將清單 1 的內容復制到此文件,確保
#刪除任何前導空格
$ vi IPServices #將清單 2 的內容復制到此文件,確保
#刪除任何前導空格
$ cd /etc
$ sudo cp -p rc rc.orig #備份原始文件
$ diff /tmp/rc rc #您應該只看到該指南中
#推薦的添加內容
$ sudo mv /tmp/rc rc
$ cd /System/Library/StartupItems/IPServices
$ sudo cp -p IPServices IPServices.orig #再次備份
$ diff /tmp/IPServices IPServices #確保
#唯一的區別只是這些添加內容
$ sudo mv /tmp/IPServices IPServices
如果使用編輯過的這些文件時出現問題,則可以將保存的文件重命名為原來的名稱以恢復這些文件。
接下來,您需要確保可以 ping 您的主機名。首先檢查該主機名:
$ hostname
您的主機名
如果看到的名稱最後為 .local,則可能要將您的主機名設置為了另外一個值:
$ sudo hostname 您的主機名
為了確保在重新啟動後保持該更改,請通過 sudo 編輯 /etc/hostconfig,並將「HOSTNAME=-AUTOMATIC-」一行更改為「HOSTNAME=您的主機名」。
現在檢查是否可以 ping 您的主機名(如果在上一步驟中必須手動設置該主機名,則可能會失敗)。
$ ping -c 1 `主機名`
如果收到「ping:unknown host 您的主機名」,則必須將您的主機名添加到 /etc/hosts 文件中。通過 sudo 編輯 /etc/hosts,將「127.0.0.1 localhost」更改為「127.0.0.1 localhost 您的主機名」。保存並重復上面的命令。您應該看到幾行輸出,其中包括「1 packets transmitted, 1 packets received, 0% packet loss」。
接下來,如果 /opt 目錄不存在,則應該創建該目錄;如果存在 /etc/oratab 文件則將其刪除:
$ test !/opt && sudo mkdir /opt
$ test /etc/oratab && sudo mv /etc/oratab /etc/oratab.orig
最後,將 Disk1 目錄移動到 oracle 用戶主目錄中,並確保它由該 oracle 用戶擁有:
$ sudo mv Disk1 /Users/oracle
$ sudo chown -R oracle:oinstall /Users/oracle/Disk1
運行 Oracle Universal Installer
現在切換回正在以 oracle 用戶運行 shell 的終端。啟動該安裝程序之前,必須配置您的環境。有關詳細信息,請參閱 Quick Install Guide 的「Log In as the oracle User and Configure the oracle User's Environment」部分,但是下列命令應該能夠完成此任務:
$ export ORACLE_BASE=/Users/oracle/10gEAR2 #如果您在上面選擇了不同的路徑,
#則請在此處使用該路徑
$ export ORACLE_SID=test10g
$ umask 022
$ unset ORACLE_HOME
$ unset TNS_ADMIN
現在啟動該安裝程序:
$ cd Disk1
$ ./runInstaller
該安裝程序是一個 java 應用程序,將引導您完成幾個配置信息屏幕。在 Quick Installer Guide 中對每個屏幕和推薦的輸入內容都進行了說明。我在此就不重復所有這些信息了,但是有幾個步驟需要澄清一下,還有其他幾個步驟,我們在其中不會使用默認值 - 如下所示。
在「Specify File Locations」屏幕上,將 Directory Path 值從 /Users/oracle/10gEAR2/OraHome_1 更改為 /Users/oracle/10gEAR2/orahome。此目錄將作為 $ORACLE_HOME 目錄。在「Installation Type」屏幕上,選擇 Enterprise Edition,然後在「Select Database Configuration」屏幕上選擇「Do not create a starter database」。您將在下一步驟中通過腳本創建、填充和配置資料庫。
最後,該試用版生成的 root.sh shell 腳本具有一些錯誤,這些錯誤與幾個實用程序的位置相關。將該腳本從清單 3 復制到一個新的 root.sh 文件。如果您已經為 $ORACLE_HOME 選擇了另外的值,則請確保首先編輯該腳本,然後再通過 sudo 運行該腳本。您可能仍會看到一些有關 Oracle Cluster Keys 的錯誤 - 如果不打算安裝資料庫集簇,則忽略這些錯誤即可。安裝資料庫集簇不在本文討論范圍之內。
安裝完成之後,您可以退出該安裝程序,開始下面的部分,即創建資料庫和測試您的安裝。
創建資料庫
將清單 4 的內容復制到一個名為 createDb 的文件。此腳本將創建 listener.ora 和 tnsnames.ora 文件,創建一個資料庫,並使用示例方案填充該資料庫。您可以在幾個位置對該腳本進行自定義,使其適用於您的應用程序,但是默認值就足以用於測試了。執行下列命令來設置您的環境,並運行該腳本:
$ chmod +x createDb
$ export ORACLE_HOME=$ORACLE_BASE/orahome
$ export PATH=$PATH:$ORACLE_HOME/bin
$ ./createDb
根據您的硬體不同,運行該腳本最多可能需要一小時的時間,在此之後,請以該示例用戶登錄來測試您的安裝:
$ sqlplus scott/tiger
SQL*Plus:Release 10.1.0.3.0 - Proction on Tue Jul 27 22:16:20 2004
Copyright (c) 1982, 2004, Oracle.All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.1.0.3.0 - Proction
With the Partitioning, OLAP and Data Mining options
SQL> select table_name from user_tables;
TABLE_NAME
------------------------------
DEPT
EMP
BONUS
SALGRADE
SQL> select count(*) from emp;
COUNT(*)
----------
14
確認資料庫正確創建之後,您可以更改默認密碼,載入您的應用程序,還可以隨意查看該示例方案。為了將該 oracle 用戶的環境配置為永久地使用這個新的資料庫,請用下列內容在該 oracle 用戶的主目錄中創建一個名為 .bashrc.oracle 的文件:
export ORACLE_HOME=/Users/oracle/10gEAR2/orahome
export ORACLE_SID=test10g
export PATH=$PATH:$ORACLE_HOME/bin
然後,通過在 .bash_profile 中創建類似下面的一行內容,確保主 shell 初始化腳本使用此文件:
. ~/.bashrc.oracle
您還可以通過將下面幾行內容復制到一個名為 oraclectl 的文件中創建一個腳本來停止和啟動該資料庫和偵聽程序。將該文件編譯成可執行文件,用「start」或「stop」作為唯一參數調用該文件。
#!/bin/sh
# 用於啟動和停止該 Oracle 資料庫
# 必須由 dba 組成員運行
start() {
$ORACLE_HOME/bin/sqlplus /nolog <<__EOF__
connect / as sysdba
startup
__EOF__
sleep 2
$ORACLE_HOME/bin/lsnrctl start
}
stop() {
$ORACLE_HOME/bin/lsnrctl stop
$ORACLE_HOME/bin/sqlplus /nolog <<__EOF__
connect / as sysdba
shutdown abort
__EOF__
}
if [ -z $ORACLE_HOME ]; then
echo "You must define ORACLE_HOME" 1>&2
exit 2
fi
if [ !-d $ORACLE_HOME ]; then
echo "Unable to find $ORACLE_HOME" 1>&2
exit 2
fi
case "$1" in
'start')
start
;;
'stop')
stop
;;
*)
echo "Usage:$0 { start | stop }"
exit 2
;;
esac
exit 0
安裝 php
首先將下載的 tar 文件復制到該 oracle 用戶的主目錄中。切換回正在運行您的管理員帳戶 shell 的終端,運行下列命令:
$ cd ~/Desktop #或您下載的 PHP tar 文件所在的目錄
$ sudo mv php-4.3.8.tar.gz ~oracle
接下來,為 oracle 用戶解壓縮源代碼,配置並構建 PHP。在此示例中,為了連接 Oracle 我們剛剛激活了 OCI 擴展;您的應用程序可能需要附加的擴展來獲得 XSLT 支持、圖像操作等。運行 ./configure --help 就可以看到所有配置選項。
$ tar zxf php-4.3.8.tar.gz
$ cd php-4.3.8
$ ./configure --with-apxs --with-oci8
$ make
$ sudo make install
為了測試您的 PHP 安裝,請使用下列內容創建一個 test_oci.php 文件:
<?php
$sid = 'test10g';
$home = '/Users/oracle/10gEAR2/orahome';
putenv("ORACLE_HOME=$home");
putenv("ORACLE_SID=$sid");
putenv("TNS_ADMIN=$home/network/admin");
echo "<html><head><title>Test OCI</title></head><body>\n";
// 對於 OCI 建議進行持久性連接
$conn = OCIPlogon('scott', 'tiger', $sid);
if ($conn) {
$stmt = OCIParse($conn, "SELECT TO_CHAR(SYSDATE,
'YYYY-MM-DD HH24:MI:SS') AS
datetime FROM DUAL");
if ($stmt) {
if (OCIExecute($stmt)) {
while (OCIFetchInto($stmt, $row, OCI_ASSOC)) {
//OCI_ASSOC 中的鍵總是大寫的
echo "SYSDATE:", $row['DATETIME'];
}
}
}
}
echo "</body></html>\n";
?>
在 Mac OS X Panther 自帶的 Apache httpd.conf 文件中為您啟用了 PHP 支持,默認文檔根目錄為 /Library/Webserver/Documents。將 test_oci.php 文件復制到該文檔根目錄中,然後啟動或者重新啟動 apache:
$ sudo apachectl start
您現在可以使您的瀏覽器指向 http://127.0.0.1/test_oci.php,應該會看到當前的日期和時間。刷新您的瀏覽器若干次,觀察時間變化,注意頁面顯示要比第一次快得多。每個 apache 子進程在使用 OCIPlogon 時都會創建一個到該資料庫的持久性連接。該子進程處理的後續請求要快得多,這是因為它可以避免建立新連接的開銷。
PHP 的 OCI 擴展支持許多高級的 Oracle 特性,如存儲過程、連接變數和游標。有關 OCI 與 PHP 結合使用的詳細信息,請參閱「資源」框中的內容。
『貳』 php連接oracle資料庫時報'The oci driver is not currently installed' ,大蝦支招,跪求
安裝php時需要安裝php對oracle資料庫的支持
1、安裝oracle 11g client或instantclient 11
2、編譯php支持oracle
--with-oci8[=DIR]
--with-pdo-oci[=DIR]
3、配置php.ini支持oracle 11g
windows:
extension=php_oci8_11g.dll
linux:
extension=php_oci8_11g.dll
『叄』 為什麼不能運行php,缺少oci.dll文件是什麼回事
dll文件一般被存放在C:\Windows\System目錄下。電腦系統文件因經常會受到病毒的侵擾,導致系統文件、dll文件等丟失、損壞,一些包括游戲在內的應用程序無法啟動。
解決方法有:
1、用Windows系統盤功能進行文件修復;
2、若在此之前有一鍵備份過,可以重新還原;
3、從網上下載系統文件然後覆蓋到原文件夾里;
4、由於從網上下載系統文件,可能會因為系統文件版本與操作系統不相符造成系統文件不兼容的情況,修復系統文件最好使用專業的工具進行一鍵修復。
5、可以用騰訊電腦管家修復下。打開電腦管家——電腦診所——軟體問題——缺少dll文件。
『肆』 安裝php代碼之後提示 Please Install PDO::OCI Driver
應該是要開啟PDO擴展
『伍』 win7的環境安裝php的oci擴展遇到問題
使用集成包phpstudy,再菜單php擴展裡面勾上oci擴展即可。看下圖,擴展管理超級方便,勾上即可打開。phpstudy支持apache,iis和nginx26種組合,php任意切換。純中文綠色解壓即可。
『陸』 PHP如何配置Oracle 10g 資料庫,並且如何連接資料庫
<?php
$db="
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = my11g)
)
)";
//$conn = oci_pconnect("sys", "123456", $db);
$conn = oci_pconnect("scott", "tiger", $db);
//$conn = ora_logon ( "scott@my11g", "tiger" );
if (!$conn) {
$e = oci_error();
print htmlentities($e['message']);
// exit;
$e1 = ocierror();
echo "失敗!";
//print htmlentities($e1['message']);
exit;
}
$query = 'select * from emp';
$stid = oci_parse($conn, $query);
if (!$stid) {
$e = oci_error($conn);
print htmlentities($e['message']);
exit;
}
$r = oci_execute($stid, OCI_DEFAULT);
if(!$r) {
$e = oci_error($stid);
echo htmlentities($e['message']);
exit;
}
print '<table border="1">';
while($row = oci_fetch_all($stid, $array)) {
//while($row = ora_fetch($stid, OCI_RETURN_NULLS)) {
print '<tr>';
//foreach($row as $item) {
//print '<td>'.($item?htmlentities($item):'').'</td>';
echo "$array";
//}
print '</tr>';
}
print '</table>';
oci_close($conn);
?>
『柒』 如何配置php中的php.ini-development文件
如何配置php中的php.ini-development文件
首先將下載好的php安裝包解壓,打開文件夾,
找到php.ini-development配置文件,重要的一步的是將文件改名字,改成php.ini
用類似Editplus的編輯器打開文件,用記事本打開可能格式會亂掉,
然後找到; extension_dir = "./"; On windows:; extension_dir = "ext"
改成; extension_dir = "./"; On windows:extension_dir = "E:/Apache Group/PHP/ext"
增加php的拓展功能(拓展功能都在ext目錄下面)
找到; http://php.net/short-open-tagshort_open_tag = Off中的Off改成On,表示支持短標簽
找到;extension=php_fileinfo.dll;extension=php_gd2.dll;extension=php_gettext.dll;extension=php_gmp.dll;extension=php_intl.dll;extension=php_imap.dll;extension=php_interbase.dll;extension=php_ldap.dll;extension=php_mbstring.dll;extension=php_exif.dll ; Must be after mbstring as it depends on it;extension=php_mysql.dll;extension=php_mysqli.dll;extension=php_oci8.dll ; Use with Oracle 10gR2 Instant Client;extension=php_oci8_11g.dll ; Use with Oracle 11gR2 Instant Client;extension=php_openssl.dll;extension=php_pdo_firebird.dll;extension=php_pdo_mssql.dll;extension=php_pdo_mysql.dll;extension=php_pdo_oci.dll;extension=php_pdo_odbc.dll;extension=php_pdo_pgsql.dll;extension=php_pdo_sqlite.dll;extension=php_pgsql.dll;extension=php_pspell.dll;extension=php_shmop.dll根據要求打開相應的功能,比如要連接資料庫的,可以將;extension=php_mysql.dll和;extension=php_mysql.dll前面的分號去掉,表示啟用相關功能
設置時區,
;date.timezone =改為date.timezone = Asia/Shanghai
『捌』 我的PHP5.3.6怎麼總是說缺少OCI.DLL和libcs.dll呢
是不是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;
}
}
?>