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 相关文章推荐
php桌面中心(二) 数据库写入
Mar 11 PHP
封装一个PDO数据库操作类代码
Sep 09 PHP
PHP 小心urldecode引发的SQL注入漏洞
Oct 27 PHP
php5.5中类级别的常量使用介绍
Oct 02 PHP
php采用file_get_contents代替使用curl实例
Nov 07 PHP
PHP获取文件行数的方法
Jun 10 PHP
盘点PHP和ASP.NET的10大对比!
Dec 24 PHP
Yii2中datetime类的使用
Dec 17 PHP
php自定义函数实现统计中文字符串长度的方法小结
Apr 15 PHP
PHP检测接口Traversable用法详解
Dec 29 PHP
PHP如何防止XSS攻击与XSS攻击原理的讲解
Mar 22 PHP
PHP7 字符串处理机制修改
Mar 09 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 之 没有mysql支持时的替代方案
2006/10/09 PHP
php类常量的使用详解
2013/06/08 PHP
安装ImageMagick出现error while loading shared libraries的解决方法
2014/09/23 PHP
php中simplexml_load_file函数用法实例
2014/11/12 PHP
PHP浮点数的一个常见问题
2016/03/10 PHP
js实现的复制兼容chrome和IE
2014/04/03 Javascript
生成二维码方法汇总
2014/12/26 Javascript
javascript中in运算符用法分析
2015/04/28 Javascript
使用jQuery制作基础的Web图片轮播效果
2016/04/22 Javascript
以v-model与promise两种方式实现vue弹窗组件
2018/05/21 Javascript
vue实现循环切换动画
2018/10/17 Javascript
如何实现一个webpack模块解析器
2018/10/24 Javascript
详解使用uni-app开发微信小程序之登录模块
2019/05/09 Javascript
vue实现循环滚动列表
2020/06/30 Javascript
vue实现验证用户名是否可用
2021/01/20 Vue.js
[02:11]完美世界DOTA2联赛10月28日赛事精彩集锦:来吧展示实力强劲
2020/10/29 DOTA
python 运算符 供重载参考
2009/06/11 Python
python Celery定时任务的示例
2018/03/13 Python
详解Django中六个常用的自定义装饰器
2018/07/04 Python
Python实现二维曲线拟合的方法
2018/12/29 Python
Python 使用 docopt 解析json参数文件过程讲解
2019/08/13 Python
python+Django+pycharm+mysql 搭建首个web项目详解
2019/11/29 Python
python使用SQLAlchemy操作MySQL
2020/01/02 Python
Pandas缺失值2种处理方式代码实例
2020/06/13 Python
python 读取.nii格式图像实例
2020/07/01 Python
海滩咖啡馆:Beach Cafe
2018/02/02 全球购物
屈臣氏泰国官网:Watsons TH
2021/02/23 全球购物
25岁生日感言
2014/01/13 职场文书
国旗下的讲话演讲稿
2014/05/08 职场文书
小学教师师德师风演讲稿
2014/08/22 职场文书
产品委托授权书范本
2014/09/16 职场文书
2014年置业顾问工作总结
2014/11/17 职场文书
自主招生自荐信范文
2015/03/04 职场文书
铁人观后感
2015/06/16 职场文书
干货干货!2019最新优秀创业计划书
2019/03/21 职场文书
Redis调用Lua脚本及使用场景快速掌握
2022/03/16 Redis