php调用mysql存储过程实例分析


Posted in PHP onDecember 29, 2014

本文实例分析了php调用mysql存储过程的方法。分享给大家供大家参考。具体分析如下:

Mysql存储过程创建语法,代码如下:

CREATE PROCEDURE和CREATE FUNCTION :

CREATE PROCEDURE sp_name ([proc_parameter[,...]]) 

 

    [characteristic ...] routine_body 

 

CREATE FUNCTION sp_name ([func_parameter[,...]]) 

 

    RETURNS type 

 

    [characteristic ...] routine_body 

 

    proc_parameter: 

 

    [ IN | OUT | INOUT ] param_name type 

 

    func_parameter: 

 

    param_name type 

 

type: 

 

    Any valid MySQL data type 

 

characteristic: 

 

    LANGUAGE SQL 

 

  | [NOT] DETERMINISTIC 

 

  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } 

 

  | SQL SECURITY { DEFINER | INVOKER } 

 

  | COMMENT 'string' 

 

routine_body: 

 

    Valid SQL procedure statement or statements

当我们看完以后,就可以开始写一些简单的存储过程了,首先建立存储过程, Create procedure(子程序)、Create function(函数),代码如下:
Create procedure sp_Name ([proc_parameter ])

routine_body

这里的参数类型可以是 IN OUT INOUTT,意思和单词的意思是一样的,IN 表示是传进来的参数,OUT 是表示传出去的参数,INOUT 是表示传进来但最终传回的参数,代码如下:

Create functionsp_Name ([func_parameter ])

Returns type

Routine_body

Returns type 指定了返回的类型,这里给定的类型与返回值的类型要是一样的,否则会报错,下面是一个简单的例子,代码如下:

mysql> delimiter // 

mysql> create procedure g 

    -> begin 

    -> select version() i 

    -> end 

    -> // 

Query OK, 0 rows affected 

 

mysql> call getversion(@a 

    -> // 

Query OK, 0 rows affected 

 

mysql> select @a; 

    -> // 

+---------------------+ 

| @a                  | 

+---------------------+ 

| 5.0.45-community-nt | 

+---------------------+ 

1 row in set (0.05 sec)

一个获取当前mysql版本的存储过程.那么php怎么与mysql的存储过程相结合呢.以下来自百度知道,代码如下:
Drop table if exists user;   

    Create table user(   

        Id int unsigned not null auto_increment,   

        Name varchar(20) not null,   

        Pwd char(32) not null,   

        Primary key(Id)   

);

添加用户的存储过程,代码如下:
Delimiter //   

    Create procedure insertuser(in username varchar(20),in userpwd varchar(32))   

    Begin   

        Insert into welefen.user(Name,Pwd) values (username,md5(userpwd));   

    End   

    //

验证用户的存储过程,代码如下:
Delimiter //   

    Create procedure validateuser(in username varchar(20),out param1)   

    Begin    

        Select Pwd into param1 from welefen.user where Name=username;   

    End   

    //

修改密码的存储过程,代码如下:
Delimiter //   

    Create procedure modifyPwd(in username varchar(20),in userpwd varchar(32))   

    Begin   

        Update welefen.user set Pwd=md5(userpwd) where Name=username;   

    End   

    //

删除用户的存储过程,代码如下:
Delimiter //   

    Create procedure deleteuser(in username varchar(20))  

Begin   

         delete from welefen.user where Name=username;   

    End   

    //

在客户端,我们给出如下的程序,代码如下:
<?php   

     if (!mysql_connect("localhost","root","welefen")){    

         echo "连接数据库失败";   

    }   

     if (!mysql_select_db("welefen")){   

         echo "选择数据库表失败<br>";   

    }   

       

    $insert_user=array("welefen","welefen");//这里的welefen分别为用户名、密码   

     if (mysql_query("call insertuser('$insert_user[0]','$insert_user[1]')")){   

         echo "添加用户$insert_user[0]成功<br>";   

    }else {   

         echo "添加用户$insert_user[0]失败<br>";   

    }   

       

    $validate_user=array("welefen","welefen");//这里的welefen分别为用户名、密码   

    mysql_query("call validateuser('$validate_user[0]',@a)");   

    $Pwd=mysql_query("select @a");   

    $result=mysql_fetch_array($Pwd);   

     if ($result[0]==md5($validate_user[1])){   

         echo "用户$validate_user[0]验证正确<br>";   

    }else {   

         echo "用户$validate_user[0]验证错误<br>";   

    }   

       

    $modify_Pwd=array("welefen","weilefeng"); //welefen为用户名weilefeng为新密码   

     if (mysql_query("call modifyPwd('$modify_Pwd[0]','$modify_Pwd[1]')")){  

         echo "用户$modigy_Pwd[0]的密码修改成功<br>";   

    }else {

         echo "用户$modigy_Pwd[0]的密码修改失败<br>";   

    }   

       

    $delete_user=array("welefen");           //welefen为用户名   

     if (mysql_query("call deleteuser('$delete_user[0]')")){   

         echo "用户$delete_user[0]删除成功<br>";   

    }else {   

         echo "用户$delete_user[0]删除失败<br>";   

    }   

?>

这样就完成了,php调用mysql的存储过程,其实这些简单的应用,就用不上存储过程了,实际的应用是比这个复杂的多,可以看出,建立了mysql的存储过程可以极大的减少了客服端的压力,但是增加了数据库服务的压力,各种利弊得实际去衡量.

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
用ODBC的分页显示
Oct 09 PHP
php Ajax乱码
Apr 09 PHP
五款常用mysql slow log分析工具的比较分析
May 22 PHP
PHP计算2点经纬度之间的距离代码
Aug 12 PHP
Yii实现多按钮保存与提交的方法
Dec 03 PHP
PHP积分兑换接口实例
Feb 09 PHP
thinkphp框架下实现登录、注册、找回密码功能
Apr 06 PHP
PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】
Jan 13 PHP
Windows 下安装 swoole 图文教程(php)
Jun 05 PHP
thinkPHP中钩子的使用方法实例分析
Nov 16 PHP
laravel 解决paginate查询多个字段报错的问题
Oct 22 PHP
如何重写Laravel异常处理类详解
Dec 20 PHP
php生成excel列名超过26列大于Z时的解决方法
Dec 29 #PHP
php+mysqli实现批量替换数据库表前缀的方法
Dec 29 #PHP
PHP跨平台获取服务器IP地址自定义函数分享
Dec 29 #PHP
PHP中使用xmlreader读取xml数据示例
Dec 29 #PHP
php读取远程gzip压缩网页的方法
Dec 29 #PHP
php导入大量数据到mysql性能优化技巧
Dec 29 #PHP
推荐几个开源的微信开发项目
Dec 28 #PHP
You might like
PHP 无限级分类
2017/05/04 PHP
PHP与Perl之间知识点区别整理
2019/03/19 PHP
JS获取IUSR_机器名和IWAM_机器名帐号的密码
2006/12/06 Javascript
JavaScript 仿关机效果的图片层
2008/12/26 Javascript
JavaScript 加号(+)运算符号
2009/12/06 Javascript
Javascript表达式中连续的 &amp;&amp; 和 || 之赋值区别
2010/10/17 Javascript
不使用中间变量,交换int型的 a, b两个变量的值。
2010/10/29 Javascript
jQuery的12招常用技巧分享
2011/08/08 Javascript
jquery增加时编辑jqGrid(实例代码)
2013/11/08 Javascript
js螺旋动画效果的具体实例
2013/11/15 Javascript
jquery实现滑动特效代码
2015/08/10 Javascript
简单实现js悬浮导航效果
2017/02/05 Javascript
jQuery插件FusionCharts绘制的2D双面积图效果示例【附demo源码】
2017/04/11 jQuery
jquery插件开发模式实例详解
2019/07/20 jQuery
vue新建项目并配置标准路由过程解析
2019/12/09 Javascript
jquery实现垂直手风琴菜单
2020/03/04 jQuery
[49:08]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
使用python Django做网页
2013/11/04 Python
2款Python内存检测工具介绍和使用方法
2014/06/01 Python
python中快速进行多个字符替换的方法小结
2016/12/15 Python
python的Crypto模块实现AES加密实例代码
2018/01/22 Python
Python实现识别手写数字大纲
2018/01/29 Python
python 读取txt,json和hdf5文件的实例
2018/06/05 Python
基于python实现语音录入识别代码实例
2020/01/17 Python
如何以Winsows Service方式运行JupyterLab
2020/08/30 Python
Kidsroom台湾:来自德国的婴儿用品
2017/12/11 全球购物
法国床上用品商店:La Compagnie du lit
2019/12/26 全球购物
思想政治自我鉴定
2013/10/06 职场文书
电气自动化专业职业规划范文
2014/02/16 职场文书
班级心理活动总结
2014/07/04 职场文书
幼儿教师自我剖析材料
2014/09/29 职场文书
2014年民政工作总结
2014/11/26 职场文书
田径运动会通讯稿
2015/07/18 职场文书
人事部:年度述职报告范文
2019/07/12 职场文书
解决redis sentinel 频繁主备切换的问题
2021/04/12 Redis
简单总结SpringMVC拦截器的使用方法
2021/06/28 Java/Android