用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设计模式 Template (模板模式)
Jun 26 PHP
PHP静态调用非静态方法的应用分析
May 02 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
Apr 29 PHP
2个Codeigniter文件批量上传控制器写法例子
Jul 25 PHP
PHP打开和关闭文件操作函数总结
Nov 18 PHP
PHP导入导出Excel代码
Jul 07 PHP
2款PHP无限级分类实例代码
Nov 11 PHP
PHP简单实现DES加密解密的方法
Jul 12 PHP
PHP全功能无变形图片裁剪操作类与用法示例
Jan 10 PHP
thinkPHP通用控制器实现方法示例
Nov 23 PHP
YII框架行为behaviors用法示例
Apr 26 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中实现图片的锐化
2006/10/09 PHP
用PHP实现多服务器共享SESSION数据的方法
2007/03/16 PHP
如何用javascript控制上传文件的大小
2006/10/26 Javascript
js实现带搜索功能的下拉框实时搜索实时匹配
2013/11/05 Javascript
禁用Tab键JS代码兼容Firefox和IE
2014/04/18 Javascript
json实现前后台的相互传值详解
2015/01/05 Javascript
Javascript 是你的高阶函数(高级应用)
2015/06/15 Javascript
jQuery+CSS实现简单切换菜单示例
2016/07/27 Javascript
JavaScript中最常用的10种代码简写技巧总结
2017/06/28 Javascript
js自定义弹框插件的封装
2020/08/24 Javascript
vue在使用ECharts时的异步更新和数据加载详解
2017/11/22 Javascript
Node.js爬虫如何获取天气和每日问候详解
2019/08/26 Javascript
JavaScript文档加载模式以及元素获取
2020/07/28 Javascript
vue打包通过image-webpack-loader插件对图片压缩优化操作
2020/11/12 Javascript
手动实现vue2.0的双向数据绑定原理详解
2021/02/06 Vue.js
[01:08:30]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第一场 2月28日
2021/03/11 DOTA
Python实现的一个找零钱的小程序代码分享
2014/08/25 Python
Python实现二分法算法实例
2015/02/02 Python
详细介绍Python的鸭子类型
2016/09/12 Python
Python中动态创建类实例的方法
2017/03/24 Python
浅谈Python2、Python3相对路径、绝对路径导入方法
2018/06/22 Python
python读取文本中的坐标方法
2018/10/14 Python
Scrapy框架使用的基本知识
2018/10/21 Python
python解析命令行参数的三种方法详解
2019/11/29 Python
python实现指定ip端口扫描方式
2019/12/17 Python
关于Python 中的时间处理包datetime和arrow的方法详解
2020/03/19 Python
pycharm工具连接mysql数据库失败问题
2020/04/01 Python
使用Keras实现Tensor的相乘和相加代码
2020/06/18 Python
python 爬虫之selenium可视化爬虫的实现
2020/12/04 Python
几个Shell Script面试题
2014/04/18 面试题
经济管理自荐书
2014/06/09 职场文书
地球一小时宣传标语
2014/06/24 职场文书
老龄工作先进事迹
2014/08/15 职场文书
摘录式读书笔记
2015/07/01 职场文书
2016年禁毒宣传活动总结
2016/04/05 职场文书
Pytorch 如何实现LSTM时间序列预测
2021/05/17 Python