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极大的增强功能和性能
Oct 09 PHP
PHP中对用户身份认证实现两种方法
Jun 04 PHP
php中使用redis队列操作实例代码
Feb 07 PHP
基于PHP array数组的教程详解
Jun 05 PHP
php下载文件源代码(强制任意文件格式下载)
May 09 PHP
php类中的$this,static,final,const,self这几个关键字使用方法
Dec 14 PHP
PHP QRCODE生成彩色二维码的方法
May 19 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
Jul 19 PHP
php实现微信公众平台发红包功能
Jun 14 PHP
详细对比php中类继承和接口继承
Oct 11 PHP
php7性能提升的原因详解
Oct 13 PHP
PHP autoload使用方法及步骤详解
Sep 05 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中基于ts与nts版本- vc6和vc9编译版本的区别详解
2013/04/26 PHP
hadoop常见错误以及处理方法详解
2013/06/19 PHP
PHP将HTML转换成文本的实现代码
2015/01/21 PHP
Laravel框架实现model层的增删改查(CURD)操作示例
2018/05/12 PHP
Thinkphp5框架ajax接口实现方法分析
2019/08/28 PHP
关于laravel5.5的定时任务详解(demo)
2019/10/23 PHP
TP5框架安全机制实例分析
2020/04/05 PHP
客户端脚本中常常出现的一些问题和调试技巧
2007/01/09 Javascript
js实现在字符串中提取数字
2013/11/05 Javascript
jQuery入门基础知识学习指南
2015/08/14 Javascript
盘点javascript 正则表达式中 中括号的【坑】
2016/03/16 Javascript
Javascript封装id、class与元素选择器方法示例
2017/03/13 Javascript
Bootstrap按钮组实例详解
2017/07/03 Javascript
react开发教程之React 组件之间的通信方式
2017/08/12 Javascript
Vue父子组件之间的通信实例详解
2018/09/28 Javascript
JS/HTML5游戏常用算法之碰撞检测 地图格子算法实例详解
2018/12/12 Javascript
微信小程序实现的绘制table表格功能示例
2019/04/26 Javascript
jQuery与原生JavaScript选择HTML元素集合用法对比分析
2019/11/26 jQuery
python的三目运算符和not in运算符使用示例
2014/03/03 Python
Django中模版的子目录与include标签的使用方法
2015/07/16 Python
说一说Python logging
2016/04/15 Python
TensorFlow入门使用 tf.train.Saver()保存模型
2018/04/24 Python
Python OpenCV处理图像之滤镜和图像运算
2018/07/10 Python
Windows下python3.7安装教程
2018/07/31 Python
Python递归函数 二分查找算法实现解析
2019/08/12 Python
HTML5混合开发二维码扫描以及调用本地摄像头
2017/12/27 HTML / CSS
HTML5 Canvas之测试浏览器是否支持Canvas的方法
2015/01/01 HTML / CSS
7 For All Mankind官网:美国加州洛杉矶的高级牛仔服装品牌
2018/12/20 全球购物
我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。 为什么如下的代码((int *)p)++; 不行?
2013/05/09 面试题
护理专业毕业生自我鉴定
2013/10/08 职场文书
厂办主管岗位职责范本
2014/02/28 职场文书
公务员党员评议表自我鉴定
2014/09/14 职场文书
2014年村支部书记四风对照检查材料思想汇报
2014/10/02 职场文书
2014年企业党支部工作总结
2014/12/04 职场文书
和谐家庭事迹材料
2014/12/20 职场文书
Pytest中conftest.py的用法
2021/06/27 Python