用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+oracle 分页类
Oct 09 PHP
使用adodb lite解决问题
Dec 31 PHP
比较全的PHP 会话(session 时间设定)使用入门代码
Jun 05 PHP
PHP在特殊字符前加斜杠的实现代码
Jul 17 PHP
PHP中soap的用法实例
Oct 24 PHP
护卫神php套件 php版本升级方法(php5.5.24)
May 10 PHP
php编写简单的文章发布程序
Jun 18 PHP
分享php代码将360浏览器导出的favdb的sqlite数据库文件转换为html
Dec 09 PHP
PHP MVC框架路由学习笔记
Mar 02 PHP
PHP简单读取xml文件的方法示例
Apr 20 PHP
PHPExcel中文帮助手册|PHPExcel使用方法(分享)
Jun 09 PHP
全面解析PHP面向对象的三大特征
Jun 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中使用curl伪造IP的简单方法
2015/08/07 PHP
详解PHP中foreach的用法和实例
2016/10/25 PHP
PHP删除二维数组中相同元素及数组重复值的方法示例
2017/05/05 PHP
javascript面向对象编程代码
2011/12/19 Javascript
jquery子元素过滤选择器使用示例
2013/06/24 Javascript
js导出table数据到excel即导出为EXCEL文档的方法
2013/10/10 Javascript
js格式化时间小结
2014/11/03 Javascript
nodejs中转换URL字符串与查询字符串详解
2014/11/26 NodeJs
DOM基础教程之事件对象
2015/01/20 Javascript
JQuery节点元素属性操作方法
2015/06/11 Javascript
javascript常用函数(2)
2015/11/05 Javascript
jquery mobile 实现自定义confirm确认框效果的简单实例
2016/06/17 Javascript
jquery做个日期选择适用于手机端示例
2017/01/10 Javascript
windows下vue.js开发环境搭建教程
2017/03/20 Javascript
JS中Swiper的使用和轮播图效果
2017/08/11 Javascript
js封装成插件的步骤方法
2017/09/11 Javascript
[01:42]辉夜杯战队访谈宣传片—FANTUAN
2015/12/25 DOTA
python笔记(1) 关于我们应不应该继续学习python
2012/10/24 Python
Python2/3中urllib库的一些常见用法
2017/12/19 Python
python 借助numpy保存数据为csv格式的实现方法
2018/07/04 Python
python实现汽车管理系统
2018/11/30 Python
python实现AES加密解密
2019/03/28 Python
HTML5 input元素类型:email及url介绍
2013/08/13 HTML / CSS
SQL Server提供的3种恢复模型都是什么? 有什么区别?
2012/05/13 面试题
办公室文秘自我鉴定
2013/09/21 职场文书
工作失职检讨书范文
2014/01/16 职场文书
电子商务专业毕业生自荐书
2014/06/22 职场文书
贯彻落实“八项规定”思想汇报
2014/09/13 职场文书
2014年仓管员工作总结
2014/11/18 职场文书
2015年幼儿园中班开学寄语
2015/05/27 职场文书
上甘岭观后感
2015/06/10 职场文书
幼儿教师继续教育培训心得体会
2016/01/19 职场文书
英语教学课后反思
2016/02/15 职场文书
《秋天的图画》教学反思
2016/02/19 职场文书
Redis缓存-序列化对象存储乱码问题的解决
2021/06/21 Redis
Apache POI的基本使用详解
2021/11/07 Servers