用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简单系统查询模块代码打包下载
Jun 07 PHP
php采集时被封ip的解决方法
Aug 29 PHP
PHP学习笔记之一
Jan 17 PHP
PHP 时间日期操作实战
Aug 26 PHP
php中使用cookie来保存用户登录信息的实现代码
Mar 08 PHP
php图片的裁剪与缩放生成符合需求的缩略图
Jan 11 PHP
php使浏览器直接下载pdf文件的方法
Nov 15 PHP
一个PHP针对数字的加密解密类
Mar 20 PHP
php读取大文件示例分享(文件操作类)
Apr 13 PHP
php ci框架中加载css和js文件失败的原因及解决方法
Jul 29 PHP
PHP 快速排序算法详解
Nov 10 PHP
php结合正则批量抓取网页中邮箱地址
May 19 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+MYSQL的文章管理系统(一)
2006/10/09 PHP
php输出表格的实现代码(修正版)
2010/12/29 PHP
Yii分页用法实例详解
2014/12/04 PHP
PHP中把对象数组转换成普通数组的方法
2015/07/10 PHP
Laravel框架Auth用户认证操作实例分析
2019/09/29 PHP
javascript Discuz代码中的msn聊天小功能
2008/05/25 Javascript
javascript 放大镜 v1.0 基于Yui2 实现的放大镜效果
2010/03/08 Javascript
JavaScript高级程序设计 阅读笔记(十二) js内置对象Math
2012/08/14 Javascript
JavaScript高级程序设计(第3版)学习笔记7 js函数(上)
2012/10/11 Javascript
jQuery获取节点和子节点文本的方法
2014/07/22 Javascript
jquery阻止后续事件只执行第一个事件
2014/07/24 Javascript
js控制输入框获得和失去焦点时状态显示的方法
2015/01/30 Javascript
详解JavaScript中数组的相关知识
2015/07/29 Javascript
javascript设计模式之对象工厂函数与构造函数详解
2015/07/30 Javascript
jQuery搜索框效果实现代码(百度关键词联想)
2021/02/25 Javascript
Web开发使用Angular实现用户密码强度判别的方法
2017/09/27 Javascript
解决微信浏览器缓存站点入口文件(IIS部署Vue项目)
2019/06/17 Javascript
nuxt踩坑之Vuex状态树的模块方式使用详解
2019/09/06 Javascript
使用layer.msg 时间设置不起作用的解决方法
2019/09/12 Javascript
layer弹出层自适应高度,垂直水平居中的实现
2019/09/16 Javascript
解决layui富文本编辑器图片上传无法回显的问题
2019/09/18 Javascript
微信小程序全局变量的设置、使用、修改过程解析
2019/09/24 Javascript
JS数组及对象遍历方法代码汇总
2020/06/16 Javascript
Python+OpenCV让电脑帮你玩微信跳一跳
2018/01/04 Python
浅谈numpy库的常用基本操作方法
2018/01/09 Python
Python实现的远程登录windows系统功能示例
2018/06/21 Python
python日志模块logbook使用方法
2019/09/19 Python
在Python中使用MongoEngine操作数据库教程实例
2019/12/03 Python
Python常用库Numpy进行矩阵运算详解
2020/07/21 Python
Django框架安装及项目创建过程解析
2020/09/14 Python
深入浅析css3 中display box使用方法
2015/11/25 HTML / CSS
什么情况下你必须要把一个类定义为abstract的
2013/01/06 面试题
机电专业毕业生求职信
2013/10/27 职场文书
中班幼儿评语大全
2014/04/30 职场文书
县政府领导班子四风问题对照检查材料思想汇报
2014/09/26 职场文书
县委班子四风对照检查材料思想汇报
2014/09/29 职场文书