首页 后端开发 php教程 php存储例程、存储过程入门教程_PHP教程

php存储例程、存储过程入门教程_PHP教程

Jul 20, 2016 am 11:09 AM
php 什么 入门教程 存储 教程 数据库 服务器 过程

php教程存储例程、存储过程入门教程

什么是存储例程?
 存储例程是存储在数据库教程服务器中的一组sql语句,通过在查询中调用一个指定的名称来执行这些sql语句命令。
为什么要使用存储过程?
 我们都知道应用程序分为两种,一种是基于web,一种是基于桌面,他们都和数据库进行交互来完成数据的存取工作。假设现在有一种应用程序包含了这两种,现在要修改其中的一个查询sql语句,那么我们可能要同时修改他们中对应的查询sql语句,当我们的应用程序很庞大很复杂的时候问题就出现这,不易维护!另外把sql查询语句放在我们的web程序或桌面中很容易遭到sql注入的破坏。而存储例程正好可以帮我们解决这些问题。
存储过程(stored procedure)、存储例程(store routine)、存储函数区别
 Mysql存储例程实际包含了存储过程和存储函数,它们被统称为存储例程。
 其中存储过程主要完成在获取记录或插入记录或更新记录或删除记录,即完成select insert delete update等的工作。而存储函数只完成查询的工作,可接受输入参数并返回一个结果。

创建存储过程、存储函数

 create procedure 存储过程名(参数)
  存储过程体

 create function 存储函数名(参数)
  存储函数体
假设现在有一个数据库omcmc中的表db_info 表结构如下:
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for db_news
-- ----------------------------
DROP TABLE IF EXISTS `db_news`;
CREATE TABLE `db_news` (
  `id` int(10) NOT NULL auto_increment,
  `title` varchar(200) NOT NULL,
  `editor` varchar(20) default NULL,
  `origin` varchar(20) default NULL,
  `tags` varchar(200) default NULL,
  `content` text NOT NULL,
  `hits` int(10) default '0',
  `ip` varchar(15) NOT NULL,
  `time` int(10) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;

-- ----------------------------
-- Records
-- ----------------------------
INSERT INTO `db_news` VALUES ('1', First App', 'xqbar.com', 'xqbar.com', 'omcmc', 'detail。。', '100', '127.0.0.1', '1215051225');

使用上面的表我们创建一个简单的存储过程
create procedure select_news()
select title,hits from db_news;

在终端运行并调用
 
从上面的截图我们看到如何调用我们的存储过程

调用存储过程
call 存储过程名();

以上我们创建了一个简单的存储过程,当然我们的应用程序不可能使用这么简单的存储过程,我们需要的是能给存储过程传递参数,以返回给我们所需要的结果数据。下面就了解下存储过程的参数。
存储过程的参数
通常存储过程接受用户的参数,返回结果给调用用户。
mysql教程规定对于存储过程的参数要求其每个参数都必须声明其参数名,数据类型以及该参数是输入参数还是用于返回信息还是两者兼有,对于存储函数php只支持输入参数。
声明参数时规定要使用关键字IN,OUT,INOUT。
其中:
 IN:用于输入参数
 OUT:用于返回参数
 INOUT:用于向存储过程传递参数值,如果该值改变则返回
另外规定对于声名为OUT,INOUT的参数当我们调用存储过程时需要在参数名前加@,以确保参数在过程外调用,下面我们修改上面的存储过程以传递信息编号给存储过程select_news,返回对应的信息标题给我们查看。

drop procedure if exists select_news;
create procedure select_news(IN id int,OUT title varchar(200))
select db_news.title from db_news where db_news.id=id;

在终端运行并调用
 
注意调用格式
call select_news(1,@title);
其中1是我们要传入的信息编号,title是要返回的对应信息编号标题,由于是OUT所以再调用时要在其前加@在过程外调用。(见下例)
drop procedure if exists getNum;
create procedure getNum(OUT num int)
select 100 into num;

call getNum(@num);
select @num;
截图:
 

php存储例程、存储过程进阶学习之二
接着上篇文章,再调用有返回值时上个例子我们可以使用以下的方法调用存储过程:
select @返回参数;
我们现在使用这个方法来调用上面我们创建的select_news,来看看
 
有人会疑问为什么返回的title是null,而不是像call select_news(1,@title)一样返回的是我们数据库编号对应的数据First App,这是由于我们的存储过程体并没有给title返回参数返回值。

下面我们来看看存储函数
仍然以db_news表为例说明,不过我们在这个存储函数中我们加入其他一些关于存储例程的知识来引入我们这次要谈及的学习对象。

drop function if exists count_news;
delimiter //
create function count_news(hits int) returns int
comment '根据传入的点击次数统计超过此点击数的信息数目'
begin
   declare total_news int;
   declare hits_num int default 0;
   if hits>=0 then
      set hits_num=hits;
      select count(id) into total_news from db_news where db_news.hits>hits_num;
  else
     set total_news=0;
   end if;
   return total_news;
end;
//
delimiter ;


 


在上面的存储函数中我们使用到了存储例程变量的声明、设置其值、判断语句、存储函数特有的返回值类型及存储例程如何描述(comment).

与存储过程返回参数不同的是存储函数在定义时没用直接声明哪个变量是返回参数,而只是使用了returns声明了返回参数所属的数据类型,返回参数是在函数体中使用return返回要返回的数据变量的形式来表示的。这就需要注意的是:
存储函数只支持输入参数,并且输入参数前没有IN或INOUT.

返回上面的存储函数,我们来解释下代码含义:
drop function if exists count_news;
如果存在存储函数count_news则删除该存储函数,与存储过程一样我们可以使用下面的语句删除存储过程或函数
drop procedure|function [if exists] 存储过程名|存储函数名;
delimiter //
使用delimiter更改mysql默认使用分号(;)使用新的结束符号来结束当前语句,使用delimiter后原先默认的分号(;)结束语句符号不再起作用,直到重新恢复声明结束符后。
create function count_news(hits int) returns int
注意存储函数的参数只有输入参数并且前不再声明IN或INOUT,返回只需声明要返回的数据类型
comment '根据传入的点击次数统计超过此点击数的信息数目'
使用comment 来描述该存储过程或存储函数的功能信息。使用格式为 comment '描述字符串 '
begin
   使用begin限定一个处理模块
declare total_news int;
声明变量 格式 declare 变量名 数据类型 [default 默认值]
   declare hits_num int default 0;
声明变量 格式 declare 变量名 数据类型 [default 默认值]
   if hits>=0 then
      set hits_num=hits;
      使用set 给变量赋值
select count(id) into total_news from db_news where db_news.hits>hits_num;
sql语句可以使用into给变量赋值
   else
     set total_news=0;
   end if;
   上面是一个判断语句,注意格式为if-else-end if 或者 if –else if-else-end if
注意分号(;)
   return total_news;
   使用return 返回存储函数要返回的值,注意该值只能是一个值。
end;
//
delimiter ;
综合一下我们上面的概念知识:
1. 存储函数的参数与存储过程有何不同。
2. 在存储例程中如何更改mysql的默认结束符号。
3. 在存储例程中如何描述功能信息。
4. 声明、设置变量。
5. begin-end语句块。
6. 条件判断if-else if-else-end if 或if-else-end if 或者if-end if


www.bkjia.comtruehttp://www.bkjia.com/PHPjc/444773.htmlTechArticlephp教程存储例程、存储过程入门教程 什么是存储例程? 存储例程是存储在数据库教程服务器中的一组sql语句,通过在查询中调用一个指定的...
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1667
14
CakePHP 教程
1426
52
Laravel 教程
1328
25
PHP教程
1273
29
C# 教程
1255
24
PHP和Python:解释了不同的范例 PHP和Python:解释了不同的范例 Apr 18, 2025 am 12:26 AM

PHP主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

在PHP和Python之间进行选择:指南 在PHP和Python之间进行选择:指南 Apr 18, 2025 am 12:24 AM

PHP适合网页开发和快速原型开发,Python适用于数据科学和机器学习。1.PHP用于动态网页开发,语法简单,适合快速开发。2.Python语法简洁,适用于多领域,库生态系统强大。

PHP和Python:深入了解他们的历史 PHP和Python:深入了解他们的历史 Apr 18, 2025 am 12:25 AM

PHP起源于1994年,由RasmusLerdorf开发,最初用于跟踪网站访问者,逐渐演变为服务器端脚本语言,广泛应用于网页开发。Python由GuidovanRossum于1980年代末开发,1991年首次发布,强调代码可读性和简洁性,适用于科学计算、数据分析等领域。

为什么要使用PHP?解释的优点和好处 为什么要使用PHP?解释的优点和好处 Apr 16, 2025 am 12:16 AM

PHP的核心优势包括易于学习、强大的web开发支持、丰富的库和框架、高性能和可扩展性、跨平台兼容性以及成本效益高。1)易于学习和使用,适合初学者;2)与web服务器集成好,支持多种数据库;3)拥有如Laravel等强大框架;4)通过优化可实现高性能;5)支持多种操作系统;6)开源,降低开发成本。

PHP的影响:网络开发及以后 PHP的影响:网络开发及以后 Apr 18, 2025 am 12:10 AM

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP与Python:用例和应用程序 PHP与Python:用例和应用程序 Apr 17, 2025 am 12:23 AM

PHP适用于Web开发和内容管理系统,Python适合数据科学、机器学习和自动化脚本。1.PHP在构建快速、可扩展的网站和应用程序方面表现出色,常用于WordPress等CMS。2.Python在数据科学和机器学习领域表现卓越,拥有丰富的库如NumPy和TensorFlow。

继续使用PHP:耐力的原因 继续使用PHP:耐力的原因 Apr 19, 2025 am 12:23 AM

PHP仍然流行的原因是其易用性、灵活性和强大的生态系统。1)易用性和简单语法使其成为初学者的首选。2)与web开发紧密结合,处理HTTP请求和数据库交互出色。3)庞大的生态系统提供了丰富的工具和库。4)活跃的社区和开源性质使其适应新需求和技术趋势。

PHP:服务器端脚本语言的简介 PHP:服务器端脚本语言的简介 Apr 16, 2025 am 12:18 AM

PHP是一种服务器端脚本语言,用于动态网页开发和服务器端应用程序。1.PHP是一种解释型语言,无需编译,适合快速开发。2.PHP代码嵌入HTML中,易于网页开发。3.PHP处理服务器端逻辑,生成HTML输出,支持用户交互和数据处理。4.PHP可与数据库交互,处理表单提交,执行服务器端任务。

See all articles