In diesem Artikel werden hauptsächlich die relevanten Informationen zum Zugriff von PHP auf die gespeicherte Prozedur mit detaillierten Beispielen vorgestellt. Hier ist der Beispielcode, der Ihnen bei der Implementierung einer solchen Funktion helfen soll
Detaillierte Erläuterung des Zugriffs von PHP auf Instanzen gespeicherter Oracle-Prozeduren
Zum Beispiel enthält meine lokale Oracle-Datenbank ein Paket mit einer gespeicherten Prozedur:
create or replace package PKG_TRANS_REL is -- Author : test -- Created : -- Purpose : test -- Public type declarations PKG_NAME varchar2(20) := 'PKG_TRANS_REL'; --存储过程,测试用 procedure pro_GC_withdraw(in_merch_no in varchar2, in_withdraw_amt in number, out_result out number, out_errmsg out varchar2); end PKG_TRANS_REL;
Der Paketname ist PKG_TRANS_REL und die gespeicherte Prozedur ist pro_GC_withdraw. Diese gespeicherte Prozedur hat vier Parameter, zwei Eingabeparameter und zwei Ausgabeparameter.
Beispiel für einen Aufruf über pdo in PHP:
$this->_pdo = new PDO(PDO_DB_DNS, PDO_DB_USER, PDO_DB_PASSWORD); $call = "CALL PKG_TRANS_REL.pro_GC_withdraw(?,?,?,?)"; try{ $stmt = $this->_pdo->prepare($call); $stmt->bindParam(1, $merch_no); $stmt->bindParam(2, $amount, PDO::PARAM_INT); $stmt->bindParam(3, $result, PDO::PARAM_INT, 4); $stmt->bindParam(4, $error_msg, PDO::PARAM_STR, 64); $stmt->execute(); }catch (PDOException $e) { $msg = 'SQL:'.$e->getMessage(); $msg = iconv('GBK','UTF-8',$msg); user_dump('SQL:'.$msg); return false; } ...
Der dritte Parameter von bindParam ist standardmäßig PDO::PARAM_STR, falls dies der Fall ist Für andere -Typen müssen Sie
EingabeparameterÜbergabewert relativ einfach angeben, während Ausgangsparameter etwas komplizierter sind die Länge muss angegeben werden.
PHP-Programme können auf die Datenbank zugreifen, indem sie gespeicherte Prozeduren verwenden. Einige Leute denken, dass die Verwendung gespeicherter Prozeduren einfacher zu warten ist. Wohlwollende Menschen haben jedoch unterschiedliche Meinungen zu diesem Thema. Ich denke, dass die Verwendung gespeicherter Prozeduren eine engere Zusammenarbeit zwischen DBA und Entwicklern erfordert.
Aber die Verwendung gespeicherter Prozeduren hat mindestens zwei der offensichtlichsten Vorteile: Geschwindigkeit und Effizienz. Die Verwendung gespeicherter Prozeduren ist offensichtlich schneller. Aus Effizienzgründen muss eine Anwendung, wenn sie eine Reihe von SQL-Vorgängen gleichzeitig ausführen muss, zwischen PHP und Oracle hin- und herwechseln. Um die Anzahl der Roundtrips zu reduzieren, ist es besser, die Anwendung direkt in die Datenbank zu stellen und die Effizienz steigern. Bei Internetanwendungen ist die Geschwindigkeit jedoch äußerst wichtig, daher ist die Verwendung gespeicherter Prozeduren erforderlich. Ich habe vor Kurzem auch PHP verwendet, um gespeicherte Prozeduren aufzurufen, und habe das folgende Beispiel gemacht.
Code
//建立一个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"; //密码 $conn_str = "tnsname"; //连接串(cstr : connection_string) $remote = true //是否远程连接 if ($remote) { $conn = ocilogon($user, $password, $conn_str); } else { $conn = ocilogon($user, $password); } //设定绑定 $id = 5; //准备用以绑定的php变量 id $name = ""; //准备用以绑定的php变量 name /** 调用存储过程的sql语句(sql_sp : sql_storeprocedure) * 语法: * begin 存储过程名([[:]参数]); end; * 加上冒号表示该参数是一个位置 **/ $sql_sp = "begin proc_test(:id, :name); end;"; //parse $stmt = ociparse($conn, $sql_sp); //执行绑定 ocibindbyname($stmt, ":id", $id, 16); //参数说明:绑定php变量$id到位置:id,并设定绑定长度16位 ocibindbyname($stmt, ":name", $name, 30); //execute ociexecute($stmt); //结果 echo "name is : $name<br>"; ?>
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des PHP-Zugriffs auf gespeicherte Oracle-Prozeduren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!