网站地图    收藏   

主页 > php专栏 > php应用 >

php程序中调用mysql存储过程实例 - php高级应用

来源:自学PHP网    时间:2014-11-27 22:16 作者: 阅读:

[导读] php与mysql本来就是天生的一对了,下面我来介绍在php程序中怎么调用在mysql中己经写好的存储过程,大家一起来看看具体实现方法.Mysql存储过程创建语法,代码如下:CREATEPROCEDURE和CREATEFUNCTION...

php程序中调用mysql存储过程实例

php与mysql本来就是天生的一对了,下面我来介绍在php程序中怎么调用在mysql中己经写好的存储过程,大家一起来看看具体实现方法.

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

  1. CREATE PROCEDURECREATE FUNCTION 
  2.  
  3. CREATE PROCEDURE sp_name ([proc_parameter[,...]]) 
  4.  
  5.     [characteristic ...] routine_body 
  6.  
  7.  
  8.  
  9. CREATE FUNCTION sp_name ([func_parameter[,...]]) 
  10.  
  11.     RETURNS type 
  12.  
  13.     [characteristic ...] routine_body 
  14.  
  15.     
  16.  
  17.     proc_parameter: 
  18.  
  19.     [ IN | OUT | INOUT ] param_name type 
  20.  
  21.     
  22.  
  23.     func_parameter: 
  24.  
  25.     param_name type 
  26.  
  27.  
  28.  
  29. type: 
  30.  
  31.     Any valid MySQL data type 
  32.  
  33.  
  34.  
  35. characteristic: 
  36.  
  37.     LANGUAGE SQL 
  38.  
  39.   | [NOT] DETERMINISTIC 
  40.  
  41.   | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } 
  42.  
  43.   | SQL SECURITY { DEFINER | INVOKER } 
  44.  
  45.   | COMMENT 'string' 
  46.  
  47.  
  48.  
  49. routine_body: 
  50.  
  51.     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.        
  3.      if (!mysql_connect("localhost","root","welefen")){    
  4.          echo "连接数据库失败";   
  5.     }   
  6.      if (!mysql_select_db("welefen")){   
  7.          echo "选择数据库表失败<br>";   
  8.     }   
  9.        
  10.     $insert_user=array("welefen","welefen");//这里的welefen分别为用户名、密码   
  11.      if (mysql_query("call insertuser('$insert_user[0]','$insert_user[1]')")){   
  12.          echo "添加用户$insert_user[0]成功<br>";   
  13.     }else {   
  14.          echo "添加用户$insert_user[0]失败<br>";   
  15.     }   
  16.        
  17.     $validate_user=array("welefen","welefen");//这里的welefen分别为用户名、密码   
  18.     mysql_query("call validateuser('$validate_user[0]',@a)");   
  19.     $Pwd=mysql_query("select @a");   
  20.     $result=mysql_fetch_array($Pwd);   
  21.      if ($result[0]==md5($validate_user[1])){   
  22.          echo "用户$validate_user[0]验证正确<br>";   
  23.     }else {   
  24.          echo "用户$validate_user[0]验证错误<br>";   
  25.     }   
  26.        
  27.     $modify_Pwd=array("welefen","weilefeng"); //welefen为用户名weilefeng为新密码   
  28.      if (mysql_query("call modifyPwd('$modify_Pwd[0]','$modify_Pwd[1]')")){  
  29.          echo "用户$modigy_Pwd[0]的密码修改成功<br>";   
  30.     }else {  //开源代码phpfensi.com 
  31.          echo "用户$modigy_Pwd[0]的密码修改失败<br>";   
  32.     }   
  33.        
  34.     $delete_user=array("welefen");           //welefen为用户名   
  35.      if (mysql_query("call deleteuser('$delete_user[0]')")){   
  36.          echo "用户$delete_user[0]删除成功<br>";   
  37.     }else {   
  38.          echo "用户$delete_user[0]删除失败<br>";   
  39.     }   
  40.     ?> 

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

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论