首頁 後端開發 php教程 如何在PHP中使用Oracle数据库_PHP

如何在PHP中使用Oracle数据库_PHP

Jun 01, 2016 pm 12:31 PM
connection cursor 使用 如何 資料庫

在php3.0以上版本中,php内置了几乎目前所有的数据库处理函数,包括Oracle;在本文中我们通过一个实例来介绍了如何使用这些函数来操作Oracle数据库。

PHP提供了2大类API(应用程序接口)来操作Oracle数据库。一个是标准的Oracle处理函数(ORA) 另一个是Oracle 8调用接口函数(OCI8). 后者只能在Oracle 7或8版本上使用。 由于OCI8 提供了很多优化选项,因此只要有可能就应该采用 OCI8 接口。这里我们分别用这二种函数集进行了演示。

首先本文的前提假设你已经装好了 Oracle数据库环境 和 PHP 开发环境. 如果不懂也没多大关系,网上有很多相关的好文章可以参考。

第一步:创建 一个实验用的数据库

这个问题你可以请你的数据库管理员或参考Oracle用户手册处理,这里不再多讲

用 ORA 建立数据表

即使你已经创建好了数据表,也请看看本段文字。它可以告诉你如何用PHP SQL的技术操作Oracle

在本例中我们创建了一个用于存放个人email的数据表

相关PHP代码:


PutEnv("ORACLE_SID=ORASID");
$connection = Ora_Logon ("username", "password");
if ($connection == false){
echo Ora_ErrorCode($connection).": ".Ora_Error($connection)."";
exit;
}
$cursor = Ora_Open ($connection);
if ($cursor == false){
echo Ora_ErrorCode($connection).": ".Ora_Error($connection)."";
exit;
}
$query = "create table email_info " .
"(fullname varchar(255), email_address varchar(255))";
$result = Ora_Parse ($cursor, $query);
if ($result == false){
echo Ora_ErrorCode($cursor).": ".Ora_Error($cursor)."";
exit;
}
$result = Ora_Exec ($cursor);
if ($result == false){
echo Ora_ErrorCode($cursor).": ".Ora_Error($cursor)."";
exit;
}
Ora_Commit ($connection);
Ora_Close ($cursor);
Ora_Logoff ($connection);
?>

为了处理Oracle数据库,我们首先要和Oracle建立一个联结。
语法是 Ora_Logon (user, password),返回一个connectID..
提醒: 在此之前我们还必须设置环境变量: ORACLE_SID的值.

现在,我们可以通过该联结的 ID对Oracle进行交互式操作了。数据表名字就叫email_info吧。该表由2个域组成,一个存储个人全名,(如:晓月)一个存储email地址如(xiaoyue@163.net)

还需要一个游标 Ora_Open. 该游标常常用来枚举数据。我们用 Ora_Parse 或 Ora_Exec 查询Oracle的结果集. Ora_Parse 效验SQL语法正确性 而 Ora_Exec 则执行相应的SQL语句. 如果这一切都正常运行,那么我们就运行 Ora_Commit来确认.

Create A Table Using OCI

下面我们将建立一个email个人信息簿。这次采用OCI8 API指令

相关PHP代码:


PutEnv("ORACLE_SID=ORASID");

$connection = OCILogon ("username", "password");
if ($connection == false){
echo OCIError($connection)."
";
exit;
}

$query = "create table email_info " .
"(fullname varchar(255), email_address varchar(255))";

$cursor = OCIParse ($connection, $query);
if ($cursor == false){
echo OCIError($cursor)."
";
exit;
}

$result = OCIExecute ($cursor);
if ($result == false){
echo OCIError($cursor)."
";
exit;
}

OCICommit ($connection);
OCILogoff ($connection);

?>

我们可以看到这2段代码语法几乎都一样,区别仅仅函数名字不同; 其次,在OCI8中我们不需要专门运行打开游标的指令,在调用 OCIParse 系统就自动返回了一个游标ID.

利用 ORA 向数据表 'email_info' 输入数据

当用户浏览这段脚本时,显示一个由姓名、email输入域组成的表单;当用户添好数据点击提交时,脚本程序将把这姓名、email保存到'email_info'数据表中。

相关PHP代码:


if ($submit == "click"){
// The submit button was clicked!
// Get the input for fullname and email then store it in the database.
PutEnv("ORACLE_SID=ORASID");

$connection = Ora_Logon ("username","password");
if ($connection == false){
echo Ora_ErrorCode($connection).": ".Ora_Error($connection)."
";
exit;
}

$cursor = Ora_Open ($connection);
if ($cursor == false){
echo Ora_ErrorCode($connection).": ".Ora_Error($connection)."
";
exit;
}

$query = "insert into email_info values ('$fullname', '$email')";
$result = Ora_Parse ($cursor, $query);
if ($result == false){
echo Ora_ErrorCode($cursor).": ".Ora_Error($cursor)."
";
exit;
}

$result = Ora_Exec ($cursor);
if ($result == false){
echo Ora_ErrorCode($cursor).": ".Ora_Error($cursor)."
";
exit;
}

Ora_Commit ($connection);
Ora_Close ($cursor);
Ora_Logoff ($connection);
}
else{
echo '


<FORM action=insert.php method=post>

请输入姓名
<INPUT name=fullname></INPUT>

请输入Email地址
<INPUT name=email></INPUT>

<INPUT name=submit type=submit value=click></INPUT>

</FORM>


';
}

?>

对了,这段脚本必须存为insert.php,因为在调用的页面中指定insert.php为表单处理程序

浏览效果:



请输入姓名
请输入Email地址


利用OCI向数据表 'email_info' 输入数据

同上,只不过用OCI来写

相关PHP代码:


if ($submit == "click"){
// The submit button was clicked!
// Get the input for fullname and email then store it in the database.
PutEnv("ORACLE_SID=ORASID");

$connection = OCILogon ("username","password");
if ($connection == false){
echo OCIError($connection)."
";
exit;
}

$query = "insert into email_info values ('$fullname', '$email')";
$cursor = OCIParse ($connection, $query);
if ($cursor == false){
echo OCIError($cursor)."
";
exit;
}

$result = OCIExecute ($cursor);
if ($result == false){
echo OCIError($cursor)."
";
exit;
}

OCICommit ($connection);
OCILogoff ($connection);
}
else{
echo '


<FORM action=insert.php method=post>

请输入姓名
<INPUT name=fullname></INPUT>

请输入 Email 地址
<INPUT name=email></INPUT>

<INPUT name=submit type=submit value=click></INPUT>

</FORM>


';
}

?>

对了,这段脚本必须存为insert.php,因为在调用的页面中指定insert.php为表单处理程序

浏览效果:



请输入姓名
请输入Email地址

利用ORA列出全部数据表'email_info'中的数据


下面,我们将逐条读出数据库的内容,并以html表格形式显示'email_info'数据表中的数据

相关PHP代码:


PutEnv("ORACLE_SID=ORASID");

$connection = Ora_Logon ("username","password");
if ($connection == false){
echo Ora_ErrorCode($connection).": ".Ora_Error($connection)."
";
exit;
}

$cursor = Ora_Open ($connection);
if ($cursor == false){
echo Ora_ErrorCode($connection).": ".Ora_Error($connection)."
";
exit;
}

$query = "select * from email_info";
$result = Ora_Parse ($cursor, $query);
if ($result == false){
echo Ora_ErrorCode($cursor).": ".Ora_Error($cursor)."
";
exit;
}

$result = Ora_Exec ($cursor);
if ($result == false){
echo Ora_ErrorCode($cursor).": ".Ora_Error($cursor)."
";
exit;
}

echo " ";
echo " ";

while (Ora_Fetch_Into ($cursor, &$values)){
$name = $values[0];
$email = $values[1];

echo " ";
}

echo "
Full Name Email Address
$name $email
";

Ora_Close ($cursor);
Ora_Logoff ($connection);

?>

程序运行的浏览效果如下所示:

姓名 Email 地址
春花 springflower@163.com
秋月 autumnmoon@163.com
... ...

利用OCI列出全部数据表'email_info'中的数据


同上,只不过用OCI来写

相关PHP代码:


PutEnv("ORACLE_SID=ORASID");

$connection = OCILogon ("username","password");
if ($connection == false){
echo OCIError($connection)."
";
exit;
}

$query = "select * from email_info";
$cursor = OCIParse ($connection, $query);
if ($cursor == false){
echo OCIError($cursor)."
";
exit;
}

$result = OCIExecute ($cursor);
if ($result == false){
echo OCIError($cursor)."
";
exit;
}

echo " ";
echo " ";

while (OCIFetchInto ($cursor, $values)){
$name = $values[0];
$email = $values[1];

echo " ";
}

echo "
Full Name Email Address
$name $email
";

OCILogoff ($connection);

?>

程序运行的浏览效果如下所示:

姓名 Email 地址
春花 springflower@163.com
秋月 autumnmoon@163.com
... ...

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1658
14
CakePHP 教程
1415
52
Laravel 教程
1309
25
PHP教程
1257
29
C# 教程
1231
24
BTCC教學:如何在BTCC交易所綁定使用MetaMask錢包? BTCC教學:如何在BTCC交易所綁定使用MetaMask錢包? Apr 26, 2024 am 09:40 AM

MetaMask(中文也叫小狐狸錢包)是一款免費的、廣受好評的加密錢包軟體。目前,BTCC已支援綁定MetaMask錢包,綁定後可使用MetaMask錢包進行快速登錄,儲值、買幣等,且首次綁定還可獲得20USDT體驗金。在BTCCMetaMask錢包教學中,我們將詳細介紹如何註冊和使用MetaMask,以及如何在BTCC綁定並使用小狐狸錢包。 MetaMask錢包是什麼? MetaMask小狐狸錢包擁有超過3,000萬用戶,是當今最受歡迎的加密貨幣錢包之一。它可免費使用,可作為擴充功能安裝在網絡

iOS 18 新增「已復原」相簿功能 可找回遺失或損壞的照片 iOS 18 新增「已復原」相簿功能 可找回遺失或損壞的照片 Jul 18, 2024 am 05:48 AM

蘋果公司最新發布的iOS18、iPadOS18以及macOSSequoia系統為Photos應用程式增添了一項重要功能,旨在幫助用戶輕鬆恢復因各種原因遺失或損壞的照片和影片。這項新功能在Photos應用的"工具"部分引入了一個名為"已恢復"的相冊,當用戶設備中存在未納入其照片庫的圖片或影片時,該相冊將自動顯示。 "已恢復"相簿的出現為因資料庫損壞、相機應用未正確保存至照片庫或第三方應用管理照片庫時照片和視頻丟失提供了解決方案。使用者只需簡單幾步

Hibernate 如何實作多型映射? Hibernate 如何實作多型映射? Apr 17, 2024 pm 12:09 PM

Hibernate多態映射可映射繼承類別到資料庫,提供以下映射類型:joined-subclass:為子類別建立單獨表,包含父類別所有欄位。 table-per-class:為子類別建立單獨資料表,僅包含子類別特有列。 union-subclass:類似joined-subclass,但父類別表聯合所有子類別列。

在PHP中使用MySQLi建立資料庫連線的詳盡教學 在PHP中使用MySQLi建立資料庫連線的詳盡教學 Jun 04, 2024 pm 01:42 PM

如何在PHP中使用MySQLi建立資料庫連線:包含MySQLi擴充(require_once)建立連線函數(functionconnect_to_db)呼叫連線函數($conn=connect_to_db())執行查詢($result=$conn->query())關閉連線( $conn->close())

如何在PHP中處理資料庫連線錯誤 如何在PHP中處理資料庫連線錯誤 Jun 05, 2024 pm 02:16 PM

PHP處理資料庫連線報錯,可以使用下列步驟:使用mysqli_connect_errno()取得錯誤代碼。使用mysqli_connect_error()取得錯誤訊息。透過擷取並記錄這些錯誤訊息,可以輕鬆識別並解決資料庫連接問題,確保應用程式的順暢運作。

什麼是Bitget Launchpool?如何使用Bitget Launchpool? 什麼是Bitget Launchpool?如何使用Bitget Launchpool? Jun 07, 2024 pm 12:06 PM

BitgetLaunchpool是一個為所有加密貨幣愛好者而設計的動態平台。 BitgetLaunchpool以其獨特的產品脫穎而出。在這裡,您可以質押您的代幣來解鎖更多獎勵,包括空投、高額回報,以及專屬早期參與者的豐厚獎金池。什麼是BitgetLaunchpool? BitgetLaunchpool是一個加密貨幣平台,可以透過使用者友善的條款和條件來質押和賺取代幣。透過在Launchpool中投入BGB或其他代幣,用戶有機會獲得免費空投、收益和參與豐厚的獎金池。質押資產的收益在T+1小時內計算,獎勵按

如何在 Golang 中使用資料庫回呼函數? 如何在 Golang 中使用資料庫回呼函數? Jun 03, 2024 pm 02:20 PM

在Golang中使用資料庫回呼函數可以實現:在指定資料庫操作完成後執行自訂程式碼。透過單獨的函數新增自訂行為,無需編寫額外程式碼。回調函數可用於插入、更新、刪除和查詢操作。必須使用sql.Exec、sql.QueryRow或sql.Query函數才能使用回呼函數。

如何用 Golang 連接遠端資料庫? 如何用 Golang 連接遠端資料庫? Jun 01, 2024 pm 08:31 PM

透過Go標準庫database/sql包,可以連接到MySQL、PostgreSQL或SQLite等遠端資料庫:建立包含資料庫連接資訊的連接字串。使用sql.Open()函數開啟資料庫連線。執行SQL查詢和插入操作等資料庫操作。使用defer關閉資料庫連線以釋放資源。

See all articles