使用 DB2 存储过程从 PHP 调用 IBM i Power 上的 CL 程序





5.00/5 (2投票s)
使用 DB2 存储过程从 PHP 调用 IBM i Power 上的 CL 程序。
概述
本文档旨在指导您创建 CL 程序、SQL 存储过程和 PHP 脚本,通过调用存储过程向 CL 程序发送和接收信息。假定您了解如何编写和编译 CL、如何连接到数据库、执行 SQL 以及运行 PHP 脚本。
CL 程序结构
CL 源代码应遵循基本结构,该结构已被证明可以实现 CL 程序和 PHP 之间的双向通信。在 CL 中可以使用更高级的技术并使用其他语言,但这超出了本文档的范围。为了将 SQL 存储过程参数与 CL 程序参数匹配,我们需要知道 CL 参数的顺序、大小和类型。如果我们的入口看起来像这样
PGM PARM(&NAME &AGE) DCL VAR(&NAME) TYPE(*CHAR) LEN(50) DCL VAR(&AGE) TYPE(*INT)
我们知道在创建存储过程时,我们需要两个参数,第一个是 CHAR(50),第二个是 INT,参数名称不需要匹配。我为本指南编写的 CL 设置了名称和年龄参数,以便我可以在 PHP 中检索这些值。将 CL 程序投入生产环境时,了解程序所在的库非常重要,因为我们的存储过程必须使用此信息创建。在我的应用程序将要部署的生产环境中,我们将为每个需要从 PHP 调用程序创建存储过程。这将是处理 SQL 执行以确保创建过程以及我们应用程序的许多其他要求的一部分。
SQL 存储过程结构
用于创建存储过程的 SQL 也应遵循基本结构。同样,可以使用高级技术,但为了本文档的目的,这些技术不在此范围内。在创建和编译 CL 程序时,我们记下了参数顺序、类型和大小。我们还记下了程序所在的库。现在我们将执行以下 SQL。
首先,我们将确保我们正在创建的存储过程不存在。
DROP PROCEDURE MYLIB/RTVPARM
然后,我们按如下方式创建存储过程。
CREATE PROCEDURE MYLIB/RTVPARM (INOUT PARAM1 CHAR(50), INOUT PARAM2 INT) LANGUAGE CL NOT DETERMINISTIC NO SQL EXTERNAL NAME MYLIB/RTVPARM PARAMETER STYLE GENERAL
PHP 脚本结构
PHP 脚本遵循 https://php.ac.cn 文档中关于连接到 DB2 的说明。这是 PHP 代码。
<?php $db = 'localhost'; $u = null; $p = null; $o = array( 'i5_libl' => 'MYLIB' ); $c = db2_pconnect($db, $u, $p, $o); $s = db2_prepare($c, 'CALL RTVPARM(?,?)'); db2_bind_param($s, 1, 'name', DB2_PARAM_INOUT); db2_bind_param($s, 2, 'year', DB2_PARAM_INOUT); $name = 'December'; $year = 2012; var_dump($name, $year); db2_execute($s); var_dump($name, $year); ?>
如果以上所有操作都正确完成,代码将产生以下结果。
string(8) "December" int(2012) string(5) "THINK" int(1911)
结论
希望本指南能帮助您实现 PHP 脚本和 CL 程序之间的简单通信。