用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 相关文章推荐
DISCUZ 论坛管理员密码忘记的解决方法
May 14 PHP
解析Linux下Varnish缓存的配置优化
Jun 20 PHP
浅析PHP中Collection 类的设计
Jun 21 PHP
如何使用PHP获取指定日期所在月的开始日期与结束日期
Aug 01 PHP
thinkPHP实现瀑布流的方法
Nov 29 PHP
PHP正则表达式之捕获组与非捕获组
Nov 06 PHP
PHP中spl_autoload_register()函数用法实例详解
Jul 18 PHP
ThinkPHP打水印及设置水印位置的方法
Oct 14 PHP
Thinkphp5.0 框架使用模型Model添加、更新、删除数据操作详解
Oct 11 PHP
在 Laravel 6 中缓存数据库查询结果的方法
Dec 11 PHP
laravel 框架执行流程与原理简单分析
Feb 01 PHP
php中array_fill函数的实例用法
Mar 02 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生成静态HTML速度快类库
2007/03/18 PHP
php日历[测试通过]
2008/03/27 PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
2016/02/23 PHP
php插件Xajax使用方法详解
2017/08/31 PHP
php生成条形码的图片的实例详解
2017/09/13 PHP
Laravel框架实现简单的学生信息管理平台案例
2019/05/07 PHP
php扩展开发入门demo示例
2019/09/23 PHP
JavaScript delete操作符应用实例
2009/01/13 Javascript
javascript 全选与全取消功能的实现代码
2012/12/23 Javascript
jQuery动态地获取系统时间实现代码
2013/05/24 Javascript
讨论html与javascript在浏览器中的加载顺序问题
2013/11/27 Javascript
javascript的创建多行字符串的7种方法
2014/04/29 Javascript
JS根据年月获得当月天数的实现代码
2014/07/03 Javascript
js实现获取当前时间是本月第几周的方法
2015/08/11 Javascript
手机端点击图片放大特效PhotoSwipe.js插件实现
2016/08/24 Javascript
js实现键盘自动打字效果
2016/12/23 Javascript
jQuery Password Validation密码验证
2016/12/30 Javascript
详解Jquery EasyUI tree 的异步加载(遍历指定文件夹,根据文件夹内的文件生成tree)
2017/02/11 Javascript
简易Vue评论框架的实现(父组件的实现)
2018/01/08 Javascript
React Navigation 使用中遇到的问题小结
2018/05/08 Javascript
vue-cli项目中使用echarts图表实例
2018/10/22 Javascript
jQuery实现动态加载(按需加载)javascript文件的方法分析
2019/05/31 jQuery
Python使用dis模块把Python反编译为字节码的用法详解
2016/06/14 Python
Python实现将SQLite中的数据直接输出为CVS的方法示例
2017/07/13 Python
Python 3.x 判断 dict 是否包含某键值的实例讲解
2018/07/06 Python
5分钟让你掌握css3阴影、倒影、渐变小技巧(小编推荐)
2016/08/15 HTML / CSS
维氏瑞士军刀英国网站:Victorinox英国
2019/07/04 全球购物
移动通信专业自荐信范文
2013/11/12 职场文书
小学生家长评语集锦
2014/01/30 职场文书
亲子拓展活动方案
2014/02/20 职场文书
社区党务公开实施方案
2014/03/18 职场文书
2015年预防青少年违法犯罪工作总结
2015/05/22 职场文书
关爱留守儿童主题班会
2015/08/13 职场文书
心理健康教育主题班会
2015/08/13 职场文书
广播稿:校园广播稿范文
2019/04/17 职场文书