用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下连接mssql2005的代码
Jan 17 PHP
PHP源码之explode使用说明
Aug 05 PHP
浅谈PHP强制类型转换,慎用!
Jun 06 PHP
自己写了一个php检测文件编码的函数
Apr 21 PHP
php cookie中点号(句号)自动转为下划线问题
Oct 21 PHP
微信API接口大全
Apr 15 PHP
PHP学习笔记(一):基本语法之标记、空白、和注释
Apr 17 PHP
php+ajax 实现输入读取数据库显示匹配信息
Oct 08 PHP
Zend Framework教程之模型Model用法简单实例
Mar 04 PHP
PHP定时任务获取微信access_token的方法
Oct 10 PHP
阿里云PHP SMS短信服务验证码发送方法
Jul 11 PHP
PHP实现的ID混淆算法类与用法示例
Aug 10 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安装为Apache DSO
2006/10/09 PHP
PHP中的output_buffering详细介绍
2014/09/27 PHP
PHP实现微信申请退款功能
2018/10/01 PHP
php两点地理坐标距离的计算方法
2018/12/29 PHP
使用Zookeeper分布式部署PHP应用程序
2019/03/15 PHP
Laravel实现搜索的时候分页并携带参数
2019/10/15 PHP
深入分析Cookie的安全性问题
2015/03/01 Javascript
浅谈利用JavaScript进行的DDoS攻击原理与防御
2015/06/04 Javascript
jQuery手机拨号界面特效代码分享
2015/08/27 Javascript
jquery实现点击页面回到顶部
2016/11/23 Javascript
Mac系统下Webstorm快捷键整理大全
2017/05/28 Javascript
Vue实现购物车场景下的应用
2017/11/27 Javascript
解析Vue 2.5的Diff算法
2017/11/28 Javascript
浅谈Webpack 持久化缓存实践
2018/03/22 Javascript
JavaScript实现一个简易的计算器实例代码
2018/05/10 Javascript
JS html事件冒泡和事件捕获操作示例
2019/05/01 Javascript
Vue父组件如何获取子组件中的变量
2019/07/24 Javascript
jQuery实现小火箭返回顶部特效
2020/02/03 jQuery
JS时间戳与日期格式互相转换的简单方法示例
2021/01/30 Javascript
[42:04]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第一局
2016/03/03 DOTA
[01:04:05]Mineski vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
使用Python脚本对Linux服务器进行监控的教程
2015/04/02 Python
在Python中使用zlib模块进行数据压缩的教程
2015/06/26 Python
Python调用系统底层API播放wav文件的方法
2017/08/11 Python
在python3中使用shuffle函数要注意的地方
2020/02/28 Python
python Socket网络编程实现C/S模式和P2P
2020/06/22 Python
Python中lru_cache的使用和实现详解
2021/01/25 Python
python抢购软件/插件/脚本附完整源码
2021/03/04 Python
马耳他航空公司官方网站:Air Malta
2019/05/15 全球购物
介绍一下HTTP、HTTPS和SSL
2012/12/16 面试题
岗位职责的含义
2013/11/17 职场文书
大学本科毕业生的自我鉴定
2013/11/26 职场文书
担保书怎么写
2014/04/01 职场文书
服务宗旨标语
2014/07/01 职场文书
茶花女读书笔记
2015/06/29 职场文书
2015暑假实习报告范文
2015/07/13 职场文书