用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 相关文章推荐
967 个函式
Oct 09 PHP
解决了Ajax、MySQL 和 Zend Framework 的乱码问题
Mar 03 PHP
创建数据库php代码 用PHP写出自己的BLOG系统
Apr 12 PHP
php 数据库字段复用的基本原理与示例
Jul 22 PHP
php批量删除数据库下指定前缀的表以prefix_为例
Aug 24 PHP
搭建基于Docker的PHP开发环境的详细教程
Jul 01 PHP
讲解WordPress开发中一些常用的debug技巧
Dec 18 PHP
Windows2003下php5.4安装配置教程(IIS)
Jun 30 PHP
php中Redis的应用--消息传递
Mar 28 PHP
Laravel中任务调度console使用方法小结
May 07 PHP
PHP实现求解最长公共子串问题的方法
Nov 17 PHP
PHP格式化显示时间date()函数代码
Oct 03 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函数getenv简介和使用实例
2014/05/12 PHP
php简单实现屏蔽指定ip段用户的访问
2015/04/29 PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
2015/08/31 PHP
Smarty模板变量调节器用法分析
2016/05/23 PHP
深入浅析Yii admin的权限控制
2016/08/31 PHP
CI框架常用函数封装实例
2016/11/21 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
jquery的键盘事件修改代码
2011/02/24 Javascript
javaScript复制功能调用实现方案
2012/12/13 Javascript
JavaScript实现url地址自动检测并添加URL链接示例代码
2013/11/12 Javascript
javascript常用经典算法详解
2017/01/11 Javascript
javascript验证香港身份证的格式或真实性
2017/02/07 Javascript
angularjs中使用ng-bind-html和ng-include的实例
2017/04/28 Javascript
JavaScript中最常用的10种代码简写技巧总结
2017/06/28 Javascript
详解VUE中v-bind的基本用法
2017/07/13 Javascript
JS实现倒序输出的几种常用方法示例
2019/04/13 Javascript
vue中datepicker的使用教程实例代码详解
2019/07/08 Javascript
Vue防止白屏添加首屏动画的实例
2019/10/31 Javascript
JavaScript实现指定数量的并发限制的示例代码
2020/03/10 Javascript
详解vue中在父组件点击按钮触发子组件的事件
2020/11/13 Javascript
python 采集中文乱码问题的完美解决方法
2016/09/27 Python
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
2018/09/13 Python
Python自定义聚合函数merge与transform区别详解
2020/05/26 Python
Python调用Redis的示例代码
2020/11/24 Python
纯CSS3代码实现switch滑动开关按钮效果
2016/08/30 HTML / CSS
html5文本内容_动力节点Java学院整理
2017/07/11 HTML / CSS
Html5 Geolocation获取地理位置信息实例
2016/12/09 HTML / CSS
全球领先的全景影像品牌:Insta360
2019/08/21 全球购物
德国婴儿服装和婴儿用品购买网站:Baby Sweets
2019/12/08 全球购物
高中语文课后反思
2014/04/27 职场文书
仓库规划计划书
2014/04/28 职场文书
物流管理系毕业生求职信
2014/06/03 职场文书
教师工作能力自我评价
2015/03/04 职场文书
红十字会救护培训简讯
2015/07/20 职场文书
2016年学习雷锋精神广播稿
2015/12/17 职场文书
讨论nginx location 顺序问题
2022/05/30 Servers