用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 相关文章推荐
PHP开发负载均衡指南
Jul 17 PHP
PHP中通过语义URL防止网站被攻击的方法分享
Sep 08 PHP
PHP新手用的Insert和Update语句构造类
Mar 31 PHP
php中导出数据到excel时数字变为科学计数的解决方法
Feb 03 PHP
php gzip压缩输出的实现方法
Apr 27 PHP
php分页代码学习示例分享
Feb 20 PHP
Windows下Apache + PHP SESSION丢失的解决过程全纪录
Apr 07 PHP
php基于curl扩展制作跨平台的restfule 接口
May 11 PHP
PHP防止刷新重复提交页面的示例代码
Nov 11 PHP
PHP中如何判断exec函数执行成功?
Aug 04 PHP
PHP实现一个多功能购物网站的案例
Sep 13 PHP
thinkphp框架类库扩展操作示例
Nov 26 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
jq的get传参数在utf-8中乱码问题的解决php版
2008/07/23 PHP
PHP学习笔记 用户注册模块用户类以及验证码类
2011/09/20 PHP
分享一下贝贝成长进度的php代码
2012/09/14 PHP
PHP使用第三方即时获取物流动态实例详解
2017/04/27 PHP
php的无刷新操作实现方法分析
2020/02/28 PHP
兼容Mozilla必须知道的知识。
2007/01/09 Javascript
js钢琴按钮波浪式图片排列效果代码分享
2015/08/26 Javascript
jQuery通过deferred对象管理ajax异步
2016/05/20 Javascript
javascript封装addLoadEvent实现页面同时加载执行多个函数的方法
2016/07/25 Javascript
JS实现鼠标滑过显示边框的菜单效果
2016/09/21 Javascript
etmvc+jQuery EasyUI+combobox多值操作实现角色授权实例
2016/11/09 Javascript
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
2016/12/14 Javascript
angular2倒计时组件使用详解
2017/01/12 Javascript
详解使用路由延迟加载 Angular 模块
2017/10/12 Javascript
vue和react等项目中更简单的实现展开收起更多等效果示例
2018/02/22 Javascript
vue-cli 首屏加载优化问题
2018/11/06 Javascript
解决Vue开发中对话框被遮罩层挡住的问题
2018/11/26 Javascript
深入浅析vue-cli@3.0 使用及配置说明
2019/05/08 Javascript
聊聊Vue中provide/inject的应用详解
2019/11/10 Javascript
基于js实现的图片拖拽排序源码实例
2020/11/04 Javascript
Python 中开发pattern的string模板(template) 实例详解
2017/04/01 Python
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
2018/02/13 Python
python实现指定ip端口扫描方式
2019/12/17 Python
Python reshape的用法及多个二维数组合并为三维数组的实例
2020/02/07 Python
win10下opencv-python特定版本手动安装与pip自动安装教程
2020/03/05 Python
小程序瀑布流解决左右两边高度差距过大的问题
2019/02/20 HTML / CSS
阿里旅行:飞猪
2017/01/05 全球购物
露营世界:Camping World
2017/02/02 全球购物
TCP/IP的分层模型
2013/10/27 面试题
班级入场式解说词
2014/02/01 职场文书
小学生学习感言
2014/03/10 职场文书
书香家庭事迹材料
2014/05/09 职场文书
数据保密承诺书
2014/06/03 职场文书
植树节标语
2014/06/27 职场文书
2014年乡镇工会工作总结
2014/12/02 职场文书
导师对论文的学术评语
2015/01/04 职场文书