用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 19 PHP
PHP内核介绍及扩展开发指南―基础知识
Sep 11 PHP
Pain 全世界最小最简单的PHP模板引擎 (普通版)
Oct 23 PHP
php实现MD5加密16位(不要默认的32位)
Aug 12 PHP
php读取excel文件示例分享(更新修改excel)
Feb 27 PHP
php与Mysql的一些简单的操作
Feb 26 PHP
PHP正则获取页面所有图片地址
Mar 23 PHP
PHP数据库操作Helper类完整实例
May 11 PHP
PHP 中TP5 Request 请求对象的实例详解
Jul 31 PHP
PHP7扩展开发之基于函数方式使用lib库的方法详解
Jan 15 PHP
浅谈laravel 5.6 安装 windows上使用composer的安装过程
Oct 18 PHP
php ActiveMQ的安装与使用方法图文教程
Feb 23 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/06/06 PHP
php实现查看邮件是否已被阅读的方法
2013/12/03 PHP
php简单实现无限分类树形列表的方法
2015/03/27 PHP
PHP实现图片的等比缩放和Logo水印功能示例
2017/05/04 PHP
jquery插件珍藏(图片局部放大/信息提示框)
2013/01/08 Javascript
js原型继承的两种方法对比介绍
2014/03/30 Javascript
JavaScript获取两个数组交集的方法
2015/06/09 Javascript
跟我学习javascript的undefined与null
2015/11/17 Javascript
javascript实现的全国省市县无刷新多级关联菜单效果代码
2016/08/01 Javascript
js 获取当前web应用的上下文路径实现方法
2016/08/19 Javascript
概述jQuery的元素筛选
2016/11/23 Javascript
jQuery中ajax错误调试分析
2016/12/01 Javascript
Ionic2调用本地SQlite实例
2017/04/22 Javascript
微信小程序如何像vue一样在动态绑定类名
2018/04/17 Javascript
全面解析vue router 基本使用(动态路由,嵌套路由)
2018/09/02 Javascript
Vue指令指令大全
2019/02/09 Javascript
JS 逻辑判断不要只知道用 if-else 和 switch条件判断(小技巧)
2020/05/27 Javascript
javascript实现图片轮换动作方法
2020/08/07 Javascript
python抓取文件夹的所有文件
2018/02/27 Python
python DataFrame获取行数、列数、索引及第几行第几列的值方法
2018/04/08 Python
从0开始的Python学习014面向对象编程(推荐)
2019/04/02 Python
Python3.5面向对象与继承图文实例详解
2019/04/24 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
2020/06/12 Python
Pytorch 卷积中的 Input Shape用法
2020/06/29 Python
英国异国风情旅游网站:Travel Talk Tours(团体旅游、探险旅游、帆船假期)
2018/07/26 全球购物
Funko官方商店:源自美国,畅销全球搪胶收藏玩偶
2018/09/15 全球购物
上海期货面试题
2014/01/31 面试题
学生党支部先进事迹
2014/02/04 职场文书
幼儿园消防演练方案
2014/02/13 职场文书
微笑服务演讲稿
2014/05/13 职场文书
理想演讲稿范文
2014/05/21 职场文书
单位委托书格式范本
2014/09/29 职场文书
夫妻吵架保证书
2015/05/08 职场文书
2016年父亲节寄语
2015/12/04 职场文书
详解CocosCreator消息分发机制
2021/04/16 Javascript
Java生成日期时间存入Mysql数据库的实现方法
2022/03/03 Java/Android