用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 相关文章推荐
WHOIS类的修改版
Oct 09 PHP
PHP数字格式化
Dec 06 PHP
memcached 和 mysql 主从环境下php开发代码详解
May 16 PHP
php+ajax实现文章自动保存的方法
Dec 30 PHP
smarty自定义函数htmlcheckboxes用法实例
Jan 22 PHP
ThinkPHP实现递归无级分类――代码少
Jul 29 PHP
yii2框架中使用下拉菜单的自动搜索yii-widget-select2实例分析
Jan 09 PHP
php+jquery+html实现点击不刷新加载更多的实例代码
Aug 12 PHP
PHP 闭包详解及实例代码
Sep 28 PHP
php实现自定义中奖项数和概率的抽奖函数示例
May 26 PHP
PHP文字转图片功能原理与实现方法分析
Aug 31 PHP
PHP防止sql注入小技巧之sql预处理原理与实现方法分析
Dec 13 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 adodb连接带密码access数据库实例,测试成功
2008/05/14 PHP
PHP字符串处理的10个简单方法
2010/06/30 PHP
php验证码实现代码(3种)
2015/09/07 PHP
php+ajax实现无刷新的新闻留言系统
2020/12/21 PHP
php防止sql注入的方法详解
2017/02/20 PHP
总结PHP代码规范、流程规范、git规范
2018/06/18 PHP
BOOM vs RR BO5 第三场 2.14
2021/03/10 DOTA
JavaScript高级程序设计 阅读笔记(十二) js内置对象Math
2012/08/14 Javascript
判断是否安装flash player及当前版本的JS代码
2013/08/08 Javascript
javascript中的取反再取反~~没有意义
2014/04/06 Javascript
用json方式实现在 js 中建立一个map
2014/05/02 Javascript
sogou地图API用法实例教程
2014/09/11 Javascript
原生JavaScript实现Ajax的方法
2016/04/07 Javascript
Bootstrap每天必学之模态框(Modal)插件
2016/04/26 Javascript
jQuery操作dom实现弹出页面遮罩层(web端和移动端阻止遮罩层的滑动)
2016/08/25 Javascript
Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)
2016/09/09 Javascript
jQuery使用animate实现ul列表项相互飘动效果示例
2016/09/16 Javascript
使用get方式提交表单在地址栏里面不显示提交信息
2017/02/21 Javascript
重学JS之显示强制类型转换详解
2019/06/30 Javascript
Vue 根据条件判断van-tab的显示方式
2020/08/03 Javascript
Vue实现小购物车功能
2020/12/21 Vue.js
Python计算一个文件里字数的方法
2015/06/15 Python
Python numpy生成矩阵、串联矩阵代码分享
2017/12/04 Python
python实现随机梯度下降(SGD)
2020/03/24 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
2019/04/01 Python
Python turtle库的画笔控制说明
2020/06/28 Python
python 获取计算机的网卡信息
2021/02/18 Python
HTML5引入的新数组TypedArray介绍
2012/12/24 HTML / CSS
html5 canvas实现圆形时钟代码分享
2013/12/25 HTML / CSS
兰蔻加拿大官方网站:Lancome加拿大
2016/08/05 全球购物
战友聚会邀请函
2014/01/18 职场文书
领导调研接待方案
2014/02/27 职场文书
财务会计专业求职信
2014/06/09 职场文书
工作经常出错的检讨书
2014/09/13 职场文书
关于运动会的广播稿
2014/09/22 职场文书
详解RedisTemplate下Redis分布式锁引发的系列问题
2021/04/27 Redis