当前位置:首页 > PHP教程 > php应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-05-05 11:37:45 浏览: 评论:0 

这篇文章主要介绍了php调用mysql存储过程,综合各种常见实例分析了php调用mysql存储过程的各种常见操作与使用技巧,具有一定的参考借鉴价值,需要的朋友可以参考下

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

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

  1. CREATE PROCEDURE和CREATE 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 } 
  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(函数),代码如下:

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 指定了返回的类型,这里给定的类型与返回值的类型要是一样的,否则会报错,下面是一个简单的例子,代码如下:

  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: php调用mysql

分享到: