网站地图    收藏   

主页 > php专栏 > php应用 >

php调用MySQL存储过程方法 - php高级应用

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

[导读] php与mysql是天生的一对,下面我来介绍在php中怎么调用mysql存储过程并执行返回结果,下面我总结了一些常用的php调用MySQL存储过程的方法,有需要了解的同学可参考.MySQL从5.0开始才引入存储...

php调用MySQL存储过程方法

php与mysql是天生的一对,下面我来介绍在php中怎么调用mysql存储过程并执行返回结果,下面我总结了一些常用的php调用MySQL存储过程的方法,有需要了解的同学可参考.

MySQL从5.0开始才引入存储过程,反正以前做应用的时候从没碰过,不过现在因为主要作内部系统,所以很多应用都用到了存储过程,当然前台有时候也需要调用MySQL存储过程,PHP的MySQL Lib好像支持的不是很好,不过我搜索了些资料,虽然不多,但是还是尝试的使用了,现在介绍一下方法.

1,调用存储过程的方法.

a。如果存储过程有 IN/INOUT参数,声明一个变量,输入参数给存储过程,该变量是一对,一个php变量(也可以不必,只是没有php变量时,没有办法进行动态输入),一个Mysql变量。

b。如果存储过程有OUT变量,声明一个Mysql变量。mysql变量的声明比较特殊,必须让mysql服务器知道此变量的存在,其实也就是执行一条mysql语句。入set @mysqlvar=$phpvar ;

c。使用mysql_query()/mysql_db_query()执行mysql 变量声明语句。

代码如下:mysql_query("set @mysqlvar【=$pbpvar】");

这样,在mysql服务器里面就有一个变量,@mysqlar,如果时IN参数,那么其值可以有phpar传入.

d。如果时存储过程。

1。执行 call procedure()语句.

也就是mysql_query("call proceduer([var1]...)");

2. 如果有返回值,执行select @ar,返回执行结果,代码如下:

mysql_query("select @var)" 

接下来的操作就和php执行一般的mysql语句一样了,可以通过mydql_fetch_row()等函数获得结果.

下面我总结了一些调用存储过程的实例无参的存储过程,代码如下:

  1. $conn = mysql_connect('localhost','root','root'or die ("数据连接错误!!!"); 
  2. mysql_select_db('test',$conn); 
  3. $sql = " 
  4. create procedure myproce() 
  5. begin 
  6. INSERT INTO user (id, username, sex) VALUES (NULL, 's''0'); 
  7. end;//开源代码phpfensi.com 
  8. "; 
  9. mysql_query($sql);//创建一个myproce的存储过程 
  10.  
  11. $sql = "call test.myproce();"
  12. mysql_query($sql);//调用myproce的存储过程,则数据库中将增加一条新记录 

类型一:调用带输入、输出类型参数的方法,代码如下:

  1. $returnValue = ''
  2. try { 
  3.  mysql_query ( "set @Return" ); 
  4.  $spname = 'P__Test_GetInfo1'
  5.  mysql_query ( "call $spname(@Return, '{$userId}', '{$pwd}')" ) or die ( "[$spname]Query failed:" . mysql_error () ); 
  6.  $result_return = mysql_query ( "select @Return" ); 
  7.  $row_return = mysql_fetch_row ( $result_return ); 
  8.  $returnValue = $row_return [0]; 
  9. } catch ( Exception $e ) { 
  10.  echo $e
  11. echo $returnValue//输出来自存储过程中输出的变量 

类型二:调用带多个输出类型和多个输入类型参数的方法,代码如下:

  1. $userId = 0; 
  2. try{ 
  3.     mysql_query("set @Message"); 
  4.     mysql_query("set @Id"); 
  5.     mysql_query("call P__Test_Login(@Message, @Id, '{$userId}', '{$pwd}')"$connor die("Query failed:".mysql_error()); 
  6.     $result_mess = mysql_query("select @Message"); 
  7.     $result_uid = mysql_query("select @Id"); 
  8.     $row_mess = mysql_fetch_row($result_mess); 
  9.     $row_uid = mysql_fetch_row($result_uid); 
  10.     $Proc_Error = $row_mess[0]; 
  11.     $uId = $row_uid[0]; 
  12. catch( Exception $e ) 
  13.    echo $e
  14. echo 'proc return message:'$Proc_Error.'<br/>'//输出来自存储过程中输出的变量 
  15. echo 'User id:'.$uId//获取用户id 

类型三:调用带返回结果集的方法,代码如下:

  1. try { 
  2.  $spname = 'P__Test_GetData'
  3.  $query = mysql_query ( "call $spname()"$conn ) or die ( "[$spname]Query failed:".mysql_error() ); 
  4.  while ( $row = mysql_fetch_array ( $query ) ) { 
  5.   echo $row ['ProvinceID'].'::'.$row ['ProvinceName']; //输出数据集 
  6.  } 
  7.  
  8. } catch ( Exception $e ) { 
  9.  echo $e

类型四:调用带返回多个结果集的方法(目前只能通过mysqli来实现~~),代码如下:

  1. //PHP 
  2. $rows = array ();   
  3. $db = new mysqli($server,$user,$psd,$dbname);   
  4. if (mysqli_connect_errno()){   
  5.     $this->message('Can not connect to MySQL server');   
  6. }   
  7. $db->query("SET NAMES UTF8");   
  8. $db->query("SET @Message"); 
  9. if($db->real_query("call P__Test_GetData2(@Message)")){   
  10.     do{   
  11.         if($result = $db->store_result()){   
  12.             while ($row = $result->fetch_assoc()){   
  13.                 array_push($rows$row);   
  14.             }   
  15.             $result->close();   
  16.         }   
  17.     }while($db->next_result());   
  18. }   
  19. $db->close();  
  20. print_r($rows); 
  21. //Procedure  
  22. …… 
  23. select * from T1 where …… 
  24. select * from T2 where …… 
  25. …… 

实例四:传出参数的inout存储过程,代码如下:

  1. $sql = " 
  2. create procedure myproce4(inout sexflag int) 
  3. begin 
  4. SELECT * FROM user WHERE sex = sexflag; 
  5. end;  
  6. "; 
  7. mysql_query($sql);//创建一个myproce4的存储过程 
  8. $sql = "set @sexflag = 1"
  9. mysql_query($sql);//设置性别参数为1 
  10. $sql = "call test.myproce4(@sexflag);"
  11. mysql_query($sql);//调用myproce4的存储过程,在cmd下面看效果  

实例五:使用变量的存储过程,代码如下:

  1. $sql = " 
  2. create procedure myproce5(in a int,in b int) 
  3. begin 
  4. declare s int default 0; 
  5. set s=a+b; 
  6. select s; 
  7. end;  
  8. "; 
  9. mysql_query($sql);//创建一个myproce5的存储过程 
  10. $sql = "call test.myproce5(4,6);"
  11. mysql_query($sql);//  

调用myproce5的存储过程,在cmd下面看效果

实例六:case语法,代码如下:

  1. $sql = " 
  2. create procedure myproce6(in score int) 
  3. begin 
  4. case score 
  5. when 60 then select '及格'
  6. when 80 then select '及良好'
  7. when 100 then select '优秀'
  8. else select '未知分数'
  9. end case
  10. end;  
  11. "; 
  12. mysql_query($sql);//创建一个myproce6的存储过程 
  13. $sql = "call test.myproce6(100);"
  14. mysql_query($sql);//  

调用myproce6的存储过程,在cmd下面看效果

实例七:循环语句,代码如下:

  1. $sql = " 
  2. create procedure myproce7() 
  3. begin 
  4. declare i int default 0; 
  5. declare j int default 0; 
  6. while i<10 do 
  7. set j=j+i; 
  8. set i=i+1; 
  9. end while
  10. select j; 
  11. end;  
  12. "; 
  13. mysql_query($sql);//创建一个myproce7的存储过程 
  14. $sql = "call test.myproce7();"
  15. mysql_query($sql);// 

调用myproce7的存储过程,在cmd下面看效果

实例八,repeat语句,代码如下:

  1. $sql = "  
  2. create procedure myproce8() 
  3. begin 
  4. declare i int default 0; 
  5. declare j int default 0; 
  6. repeat 
  7. set j=j+i; 
  8. set i=i+1; 
  9. until j>=10 
  10. end repeat; 
  11. select j; 
  12. end;  
  13. "; 
  14. mysql_query($sql);//创建一个myproce8的存储过程 
  15. $sql = "call test.myproce8();"
  16. mysql_query($sql);//  

调用myproce8的存储过程,在cmd下面看效果

实例九,loop语句,代码如下:

  1. $sql = " 
  2. create procedure myproce9() 
  3. begin 
  4. declare i int default 0; 
  5. declare s int default 0; 
  6.  
  7. loop_label:loop 
  8. set s=s+i; 
  9. set i=i+1; 
  10. if i>=5 then 
  11. leave loop_label; 
  12. end if
  13. end loop; 
  14. select s; 
  15. end;  
  16. "; 
  17. mysql_query($sql);//创建一个myproce9的存储过程 
  18. $sql = "call test.myproce9();"
  19. mysql_query($sql);// 

调用myproce9的存储过程,在cmd下面看效果

实例十,删除存储过程,代码如下:

mysql_query("drop procedure if exists myproce");//删除test的存储过程

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

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

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

添加评论