好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

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

php与mysql本来就是天生的一对了,下面我来介绍在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  {   //开源代码phpfensi测试数据             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程序中调用mysql存储过程实例 - php高级应用的详细内容...

  阅读:46次