PHP プログラムはストアド プロシージャを使用してデータベースにアクセスできます。
この問題については、ストアド プロシージャを使用する必要があると考えている人もいます。緊密な連携はより注意してください。一方が変更されると、それを維持することが明らかに困難になります。
しかし、ストアド プロシージャを使用すると、速度と効率という最も明白な利点が少なくとも 2 つあります。
ストアド プロシージャを使用した方が明らかに高速です。
効率の観点から、アプリケーションが一連の SQL 操作を一度に実行する必要がある場合、PHP と ORACLE の間を行ったり来たりする必要があるため、その数を減らすためにアプリケーションをデータベースに直接配置する方が良いでしょう。往復の時間を短縮し、効率を向上させます。
しかし、インターネット アプリケーションでは速度が非常に重要であるため、ストアド プロシージャを使用する必要があります。
また、PHP を使用してストアド プロシージャを呼び出し、次の例を実行しました。
コード:------------------------------------------ --- ---------------------------------------------------
//TEST テーブルを作成します
CREATE TABLE TEST (
ID NUMBER(16) NOT NULL,
NAME VARCHAR2(30) NOT NULL,
PRIMARY KEY (ID)
);
// データの一部を挿入
INSERT INTO TEST VALUES (5, 'PHP_BOOK');
// ストアド プロシージャを作成します
CREATE OR REPLACE PROCEDURE PROC_TEST (
p_id IN OUT NUMBER,
p_name OUT VARCHAR2
) AS
BEGIN
SELECT NAME INTO p_name
FROM TEST
WHERE ID = 5;
END PROC_TEST;
/
-- ---------------------------------- ---------------- ----------------------------
PHP コード:--------------------- ---------------------------------- ---------------- -----------------------
//データベース接続を確立
$user = "scott"; // データベースユーザー名
$password = "tiger";
if ($remote) { $conn = OCILogon($user, $password, $conn_str);
}
else {
$conn = OCILogon($user, $password);
}
//バインディングを設定します
$id = 5; バインディング用のphp変数名を準備します
* 構文:
* BEGIN ストアド プロシージャ名 ([[:]parameter]) END;
* コロンを追加すると、パラメータが位置
$sql_sp = "BEGIN PROC_TEST(:id, :name); END;";
//解析
$stmt = OCIParse($conn, $sql_sp);
//バインディングを実行
OCIBindByName($stmt, ":name", $name, 30) ;
OCIExecute($stmt);
//結果
? >