在 PHP 中使用 ODP (Oracle Database PHP) 擴(kuò)展進(jìn)行存儲(chǔ)過(guò)程調(diào)用,首先需要確保已經(jīng)安裝并啟用了 ODP 擴(kuò)展。以下是如何使用 ODP 調(diào)用存儲(chǔ)過(guò)程的步驟:
安裝和配置 ODP 擴(kuò)展:
php.ini
文件中,以便 PHP 能夠找到它。pecl install oci8
命令安裝 ODP 擴(kuò)展(如果尚未安裝)。php.ini
文件中啟用 ODP 擴(kuò)展,添加以下行:extension=oci8.so
(對(duì)于 Unix 系統(tǒng))或 extension=php_oci8.dll
(對(duì)于 Windows 系統(tǒng))。創(chuàng)建存儲(chǔ)過(guò)程:
CREATE OR REPLACE PROCEDURE add_numbers(
num1 IN NUMBER,
num2 IN NUMBER,
sum OUT NUMBER
) AS
BEGIN
sum := num1 + num2;
END;
在 PHP 中調(diào)用存儲(chǔ)過(guò)程:
add_numbers
存儲(chǔ)過(guò)程,并輸出結(jié)果:<?php
// 數(shù)據(jù)庫(kù)連接信息
$username = 'your_username';
$password = 'your_password';
$dsn = 'oci:dbname=your_database;charset=UTF8';
try {
// 創(chuàng)建一個(gè) ODP 上下文
$conn = oci_connect($username, $password, $dsn);
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
// 準(zhǔn)備調(diào)用存儲(chǔ)過(guò)程
$stmt = oci_parse($conn, '{call add_numbers(?, ?, ?)}');
if (!$stmt) {
$e = oci_error($conn);
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
// 綁定輸入和輸出參數(shù)
oci_bind_by_name($stmt, ':num1', $num1);
oci_bind_by_name($stmt, ':num2', $num2);
oci_bind_by_name($stmt, ':sum', $sum, 10); // 10 是輸出參數(shù)的最大長(zhǎng)度
// 執(zhí)行存儲(chǔ)過(guò)程
$result = oci_execute($stmt);
if (!$result) {
$e = oci_error($stmt);
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
// 輸出結(jié)果
echo "The sum is: " . $sum;
// 清理
oci_free_statement($stmt);
oci_close($conn);
} catch (Exception $e) {
echo 'Error: ', $e->getMessage(), "\n";
}
?>
在這個(gè)腳本中,我們首先建立了一個(gè)到 Oracle 數(shù)據(jù)庫(kù)的連接,然后解析并執(zhí)行了存儲(chǔ)過(guò)程 add_numbers
。我們綁定了輸入?yún)?shù) $num1
和 $num2
,以及輸出參數(shù) $sum
。執(zhí)行存儲(chǔ)過(guò)程后,我們輸出了結(jié)果。最后,我們釋放了語(yǔ)句句柄并關(guān)閉了數(shù)據(jù)庫(kù)連接。
請(qǐng)確保將上述代碼中的 'your_username'
、'your_password'
和 'your_database'
替換為你的實(shí)際數(shù)據(jù)庫(kù)連接信息。此外,根據(jù)實(shí)際情況調(diào)整存儲(chǔ)過(guò)程的名稱和參數(shù)。