在 PHP 中使用 ODP (Oracle Database PHP) 扩展进行存储过程调用,首先需要确保已经安装并启用了 ODP 扩展。以下是如何使用 ODP 调用存储过程的步骤:
安装和配置 ODP 扩展:
php.ini
文件中,以便 PHP 能够找到它。pecl install oci8
命令安装 ODP 扩展(如果尚未安装)。php.ini
文件中启用 ODP 扩展,添加以下行:extension=oci8.so
(对于 Unix 系统)或 extension=php_oci8.dll
(对于 Windows 系统)。创建存储过程:
CREATE OR REPLACE PROCEDURE add_numbers(
num1 IN NUMBER,
num2 IN NUMBER,
sum OUT NUMBER
) AS
BEGIN
sum := num1 + num2;
END;
在 PHP 中调用存储过程:
add_numbers
存储过程,并输出结果:<?php
// 数据库连接信息
$username = 'your_username';
$password = 'your_password';
$dsn = 'oci:dbname=your_database;charset=UTF8';
try {
// 创建一个 ODP 上下文
$conn = oci_connect($username, $password, $dsn);
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
// 准备调用存储过程
$stmt = oci_parse($conn, '{call add_numbers(?, ?, ?)}');
if (!$stmt) {
$e = oci_error($conn);
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
// 绑定输入和输出参数
oci_bind_by_name($stmt, ':num1', $num1);
oci_bind_by_name($stmt, ':num2', $num2);
oci_bind_by_name($stmt, ':sum', $sum, 10); // 10 是输出参数的最大长度
// 执行存储过程
$result = oci_execute($stmt);
if (!$result) {
$e = oci_error($stmt);
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
// 输出结果
echo "The sum is: " . $sum;
// 清理
oci_free_statement($stmt);
oci_close($conn);
} catch (Exception $e) {
echo 'Error: ', $e->getMessage(), "\n";
}
?>
在这个脚本中,我们首先建立了一个到 Oracle 数据库的连接,然后解析并执行了存储过程 add_numbers
。我们绑定了输入参数 $num1
和 $num2
,以及输出参数 $sum
。执行存储过程后,我们输出了结果。最后,我们释放了语句句柄并关闭了数据库连接。
请确保将上述代码中的 'your_username'
、'your_password'
和 'your_database'
替换为你的实际数据库连接信息。此外,根据实际情况调整存储过程的名称和参数。