用PHP调用Oracle存储过程


Posted in PHP onOctober 09, 2006

PHP程序访问数据库,完全可以使用存储过程,有人认为使用存储过程便于维护
不过仁者见仁,智者见智,在这个问题上,偶认为使用存储过程意味着必须要DBA和开发人员更紧密配合,如果其中一方更变,则显然难以维护。
但是使用存储过程至少有两个最明显的优点:速度和效率。
使用存储过程的速度显然更快。
在效率上,如果应用一次需要做一系列SQL操作,则需要往返于PHP与ORACLE,不如把该应用直接放到数据库方以减少往返次数,增加效率。
但是在INTERNET应用上,速度是极度重要的,所以很有必要使用存储过程。
偶也是使用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代码:--------------------------------------------------------------------------------

<?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>";

?>

 

PHP 相关文章推荐
分页显示Oracle数据库记录的类之一
Oct 09 PHP
织梦模板标记简介
Mar 11 PHP
PHP 手机归属地查询 api
Feb 08 PHP
php 无限级分类学习参考之对ecshop无限级分类的解析 带详细注释
Mar 23 PHP
php5.3 goto函数介绍和示例
Mar 21 PHP
PHP实现从远程下载文件的方法
Mar 12 PHP
PHP判断IP并转跳到相应城市分站的方法
Mar 25 PHP
详解PHP中的 input属性(隐藏 只读 限制)
Aug 14 PHP
Laravel下生成验证码的类
Nov 15 PHP
PHP实现求连续子数组最大和问题2种解决方法
Dec 26 PHP
PHP写API输出的时用echo的原因详解
Apr 28 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
Mar 27 PHP
不用GD库生成当前时间的PNG格式图象的程序
Oct 09 #PHP
用定制的PHP应用程序来获取Web服务器的状态信息
Oct 09 #PHP
PHP在Web开发领域的优势
Oct 09 #PHP
优化NFR之一 --MSSQL Hello Buffer Overflow
Oct 09 #PHP
风格模板初级不完全修改教程
Oct 09 #PHP
如何对PHP程序中的常见漏洞进行攻击
Oct 09 #PHP
PHP安全配置
Oct 09 #PHP
You might like
php存储过程调用实例代码
2013/02/03 PHP
php版微信js-sdk支付接口类用法示例
2016/10/12 PHP
php上传excel表格并获取数据
2017/04/27 PHP
PHP实现PDO操作mysql存储过程示例
2019/02/13 PHP
Jquery replace 字符替换实现代码
2010/12/02 Javascript
JS this作用域以及GET传输值过长的问题解决方法
2013/08/06 Javascript
jQuery关于导航条背景切换效果实现示例
2013/09/04 Javascript
jQuery中last()方法用法实例
2015/01/06 Javascript
jQuery实现html表格动态添加新行的方法
2015/05/28 Javascript
jQuery form插件之formDdata参数校验表单及验证后提交
2016/01/23 Javascript
AngularJS验证信息框架的封装插件用法【w5cValidator扩展插件】
2016/11/03 Javascript
JS搜狐面试题分析
2016/12/16 Javascript
Html5+jQuery+CSS制作相册小记录
2016/12/30 Javascript
Angular实现较为复杂的表格过滤,删除功能示例
2017/12/23 Javascript
jquery实现楼层滚动效果
2018/01/01 jQuery
在react-router4中进行代码拆分的方法(基于webpack)
2018/03/08 Javascript
微信小程序实现留言功能
2018/10/31 Javascript
express框架下使用session的方法
2019/07/31 Javascript
在vue中axios设置timeout超时的操作
2020/09/04 Javascript
解决await在forEach中不起作用的问题
2021/02/25 Javascript
[52:02]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第一场 11.27
2020/11/30 DOTA
基于python内置函数与匿名函数详解
2018/01/09 Python
python中yaml配置文件模块的使用详解
2018/04/27 Python
在Python中字典根据多项规则排序的方法
2019/01/21 Python
Python检查ping终端的方法
2019/01/26 Python
详解python读取和输出到txt
2019/03/29 Python
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
2019/06/27 Python
Python第三方库安装缓慢的解决方法
2021/02/06 Python
Lookfantastic德国官网:英国知名美妆购物网站
2017/06/11 全球购物
美国购物网站:Clickhere2shop
2021/01/28 全球购物
船舶专业个人求职信范文
2014/01/02 职场文书
工商局局长个人对照检查材料思想汇报
2014/09/23 职场文书
2016初一新生军训心得体会
2016/01/11 职场文书
SQL实现LeetCode(176.第二高薪水)
2021/08/04 MySQL
Flutter集成高德地图并添加自定义Maker的实践
2022/04/07 Java/Android
Golang 1.18 多模块Multi-Module工作区模式的新特性
2022/04/11 Golang