用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 相关文章推荐
简单的过滤字符串中的HTML标记
Dec 25 PHP
php共享内存段示例分享
Jan 20 PHP
PHP中file_exists()判断中文文件名无效的解决方法
Nov 12 PHP
php备份数据库类分享
Apr 14 PHP
php通过两层过滤获取留言内容的方法
Jul 11 PHP
PHP+mysql实现从数据库获取下拉树功能示例
Jan 06 PHP
PHP实现留言板功能的详细代码
Mar 25 PHP
php生成网页桌面快捷方式
May 05 PHP
thinkPHP框架实现多表查询的方法
Jun 14 PHP
PHP扩展mcrypt实现的AES加密功能示例
Jan 29 PHP
Yii 框架入口脚本示例分析
May 19 PHP
基于ThinkPHP删除目录及目录文件函数
Oct 28 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
《星际争霸II》全新指挥官斯台特曼现已上线
2020/03/08 星际争霸
PHP递归调用的小技巧讲解
2013/02/19 PHP
Yii列表定义与使用分页方法小结(3种方法)
2016/07/15 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
PHP 加密 Password Hashing API基础知识点
2020/03/02 PHP
node.js中Socket.IO的进阶使用技巧
2014/11/04 Javascript
浅析node.js中close事件
2014/11/26 Javascript
JavaScript通过setTimeout实时显示当前时间的方法
2015/04/16 Javascript
js实现iPhone界面风格的单选框和复选框按钮实例
2015/08/18 Javascript
通过jquery-ui中的sortable来实现拖拽排序的简单实例
2016/05/24 Javascript
js实现精确到毫秒的倒计时效果
2016/08/05 Javascript
AngularJs中Bootstrap3 datetimepicker使用实例
2016/12/13 Javascript
AngularJS中run方法的巧妙运用
2017/01/04 Javascript
原生js实现节日时间倒计时功能
2017/01/18 Javascript
实时监控input框,实现输入框与下拉框联动的实例
2018/01/23 Javascript
Vue中在新窗口打开页面及Vue-router的使用
2018/06/13 Javascript
微信小程序后台持续定位功能使用详解
2019/08/23 Javascript
jquery 遍历hash操作示例【基于ajax交互】
2019/10/12 jQuery
js cavans实现静态滚动弹幕
2020/05/21 Javascript
Element MessageBox弹框的具体使用
2020/07/27 Javascript
[03:19]2016国际邀请赛中国区预选赛第四日TOP10镜头集锦
2016/07/01 DOTA
Linux下为不同版本python安装第三方库
2016/08/31 Python
Python中的id()函数指的什么
2017/10/17 Python
由Python编写的MySQL管理工具代码实例
2019/04/09 Python
python3用PIL把图片转换为RGB图片的实例
2019/07/04 Python
Python数据分析模块pandas用法详解
2019/09/04 Python
python中自带的三个装饰器的实现
2019/11/08 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
2020/04/10 Python
bareMinerals官网:矿物质化妆品和护肤品
2018/02/04 全球购物
Pottery Barn阿联酋:购买家具、家居装饰及更多
2019/12/08 全球购物
涉外经济法专业毕业生推荐信
2013/11/24 职场文书
租房协议书
2014/04/10 职场文书
学校运动会报道稿
2014/09/23 职场文书
MySQL索引篇之千万级数据实战测试
2021/04/05 MySQL
python 管理系统实现mysql交互的示例代码
2021/12/06 Python