用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动态图像的创建
Oct 09 PHP
php数据结构 算法(PHP描述) 简单选择排序 simple selection sort
Aug 09 PHP
ajax完美实现两个网页 分页功能的实例代码
Apr 16 PHP
深入PHP操作MongoDB的技术总结
Jun 02 PHP
解决CodeIgniter伪静态失效
Jun 09 PHP
关于URL最大长度限制的相关资料查证
Dec 23 PHP
微信公众平台开发关注及取消关注事件的方法
Dec 23 PHP
php调用KyotoTycoon简单实例
Apr 02 PHP
php格式化电话号码的方法
Apr 24 PHP
php+MySQL实现登录时验证登录名和密码是否正确
May 10 PHP
PHP 断点续传实例详解
Nov 11 PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
Jul 24 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字符转义相关函数小结(php下的转义字符串)
2007/04/12 PHP
PHP文件读写操作相关函数总结
2014/11/18 PHP
Json_encode防止汉字转义成unicode的方法
2016/02/25 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
2017/02/28 PHP
ThinkPHP 模板引擎使用详解
2017/05/07 PHP
PHP实现websocket通信的方法示例
2018/08/28 PHP
PHP基于openssl实现的非对称加密操作示例
2019/01/11 PHP
textarea的value是html文件源代码,存成html文件的代码
2007/04/20 Javascript
jquery放大镜效果超漂亮噢
2013/11/15 Javascript
jQuery中width()方法用法实例
2014/12/24 Javascript
Java Mybatis框架入门基础教程
2015/09/21 Javascript
node.js+express制作网页计算器
2016/01/17 Javascript
javascript每日必学之循环
2016/02/19 Javascript
jQuery EasyUI Layout实现tabs标签的实例
2017/09/26 jQuery
Vue2.0设置全局样式(less/sass和css)
2017/11/18 Javascript
一秒学会微信小程序制作table表格
2019/02/14 Javascript
浅谈关于vue中scss公用的解决方案
2019/12/02 Javascript
javascript设计模式 ? 中介者模式原理与用法实例分析
2020/04/20 Javascript
解决Echarts 显示隐藏后宽度高度变小的问题
2020/07/19 Javascript
[51:34]Ti4主赛事胜者组 DK vs EG 2
2014/07/19 DOTA
浅谈python字符串方法的简单使用
2016/07/18 Python
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
2016/11/16 Python
Python操作mongodb的9个步骤
2018/06/04 Python
Python爬虫解析网页的4种方式实例及原理解析
2019/12/30 Python
python解析多层json操作示例
2019/12/30 Python
python模拟点击在ios中实现的实例讲解
2020/11/26 Python
斯洛伐克时尚服装网上商店:Cellbes
2016/10/20 全球购物
LEGO玩具英国官方商店:LEGO Shop GB
2018/03/27 全球购物
2019史上最全Database工程师题库
2015/12/06 面试题
DELPHI中如何调用API,可举例说明
2014/01/16 面试题
专科应届生求职信
2013/11/24 职场文书
趣味体育活动方案
2014/02/08 职场文书
岗位职责怎么写
2014/03/14 职场文书
廉洁使者实施方案
2014/03/29 职场文书
乡镇领导班子批评与自我批评材料
2014/09/23 职场文书
计划生育诚信协议书
2014/11/02 职场文书