当前位置:首页 > Mysql教程 > 列表

php调用mysql存储过程会员登录验证实例分析

发布:smiling 来源: PHP粉丝网  添加日期:2015-04-18 16:01:55 浏览: 评论:0 

本实例采用php调用msyql存储过程实现用户登录,注册,修改密码等功能,前面部分讲了Mysql如何创建存储过程,如果想用Mysql存储过程的朋友,值得参考,本文实例分析了php调用mysql存储过程的方法,分享给大家供大家参考,具体分析如下:

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

  1. CREATE PROCEDURECREATE FUNCTION : 
  2.  
  3. CREATE PROCEDURE sp_name ([proc_parameter[,...]]) 
  4.  
  5.     [characteristic ...] routine_body 
  6.  
  7. CREATE FUNCTION sp_name ([func_parameter[,...]]) 
  8.  
  9.     RETURNS type 
  10.  
  11.     [characteristic ...] routine_body 
  12.  
  13.     proc_parameter: 
  14.  
  15.     [ IN | OUT | INOUT ] param_name type 
  16.  
  17.     func_parameter: 
  18.  
  19.     param_name type 
  20.  
  21. type: 
  22.  
  23.     Any valid MySQL data type 
  24.  
  25. characteristic: 
  26.  
  27.     LANGUAGE SQL 
  28.  
  29.   | [NOT] DETERMINISTIC 
  30.  
  31.   | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }  --phpfensi.com 
  32.  
  33.   | SQL SECURITY { DEFINER | INVOKER } 
  34.  
  35.   | COMMENT 'string' 
  36.  
  37. routine_body: 
  38.  
  39.     Valid SQL procedure statement or statements 

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

  1. Create procedure sp_Name ([proc_parameter ]) 
  2. routine_body 

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

  1. Create functionsp_Name ([func_parameter ]) 
  2. Returns type 
  3. Routine_body 

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

  1. mysql> delimiter // 
  2. mysql> create procedure g 
  3.     -> begin 
  4.     -> select version() i 
  5.     -> end 
  6.     -> // 
  7. Query OK, 0 rows affected 
  8.  
  9. mysql> call getversion(@a 
  10.     -> // 
  11. Query OK, 0 rows affected 
  12.  
  13. mysql> select @a; 
  14.     -> // 
  15. +---------------------+ 
  16. | @a                  | 
  17. +---------------------+ 
  18. | 5.0.45-community-nt | 
  19. +---------------------+ 
  20. 1 row in set (0.05 sec) 

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

  1. Drop table if exists user;   
  2.     Create table user(   
  3.         Id int unsigned not null auto_increment,   
  4.         Name varchar(20) not null,   
  5.         Pwd char(32) not null,   
  6.         Primary key(Id)   
  7. ); 

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

  1. Delimiter //   
  2.     Create procedure insertuser(in username varchar(20),in userpwd varchar(32))   
  3.     Begin   
  4.         Insert into welefen.user(Name,Pwd) values (username,md5(userpwd));   
  5.     End   
  6.     // 

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

  1. Delimiter //   
  2.     Create procedure validateuser(in username varchar(20),out param1)   
  3.     Begin    
  4.         Select Pwd into param1 from welefen.user where Name=username;   
  5.     End   
  6.     // 

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

  1. Delimiter //   
  2.     Create procedure modifyPwd(in username varchar(20),in userpwd varchar(32))   
  3.     Begin   
  4.         Update welefen.user set Pwd=md5(userpwd) where Name=username;   
  5.     End   
  6.     // 

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

  1. Delimiter //   
  2.     Create procedure deleteuser(in username varchar(20))  
  3. Begin   
  4.          delete from welefen.user where Name=username;   
  5.     End   
  6.     // 

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

  1. <?php   
  2.      if (!mysql_connect("localhost","root","welefen")){    
  3.          echo "连接数据库失败";   
  4.     }   
  5.      if (!mysql_select_db("welefen")){   
  6.          echo "选择数据库表失败<br>";   
  7.     }   
  8.        
  9.     $insert_user=array("welefen","welefen");//这里的welefen分别为用户名、密码   
  10.      if (mysql_query("call insertuser('$insert_user[0]','$insert_user[1]')")){   
  11.          echo "添加用户$insert_user[0]成功<br>";   
  12.     }else {   
  13.          echo "添加用户$insert_user[0]失败<br>";   
  14.     }   
  15.        
  16.     $validate_user=array("welefen","welefen");//这里的welefen分别为用户名、密码   
  17.     mysql_query("call validateuser('$validate_user[0]',@a)");   
  18.     $Pwd=mysql_query("select @a");   
  19.     $result=mysql_fetch_array($Pwd);   
  20.      if ($result[0]==md5($validate_user[1])){   
  21.          echo "用户$validate_user[0]验证正确<br>";   
  22.     }else {   
  23.          echo "用户$validate_user[0]验证错误<br>";   
  24.     }   
  25.        
  26.     $modify_Pwd=array("welefen","weilefeng"); //welefen为用户名weilefeng为新密码   
  27.      if (mysql_query("call modifyPwd('$modify_Pwd[0]','$modify_Pwd[1]')")){  
  28.          echo "用户$modigy_Pwd[0]的密码修改成功<br>";   
  29.     }else { 
  30.          echo "用户$modigy_Pwd[0]的密码修改失败<br>";   
  31.     }   
  32.        
  33.     $delete_user=array("welefen");           //welefen为用户名   
  34.      if (mysql_query("call deleteuser('$delete_user[0]')")){   
  35.          echo "用户$delete_user[0]删除成功<br>";   
  36.     }else {   
  37.          echo "用户$delete_user[0]删除失败<br>";   
  38.     }   
  39. ?> 

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

Tags: mysql存储过程 mysql登录验证

分享到: