国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

php調用MySQL存儲過程方法

2024-05-04 21:49:14
字體:
來源:轉載
供稿:網友

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;//開源代碼Vevb.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的存儲過程

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 古蔺县| 栾城县| 夏邑县| 沙坪坝区| 琼结县| 南开区| 曲麻莱县| 沂南县| 大英县| 安龙县| 江津市| 漳州市| 嵊泗县| 葵青区| 兴文县| 佳木斯市| 平和县| 腾冲县| 乐昌市| 杭锦旗| 商洛市| 望奎县| 襄城县| 永川市| 当雄县| 长治市| 额济纳旗| 柳河县| 灌云县| 南京市| 奈曼旗| 泸水县| 资溪县| 集安市| 陆河县| 麻栗坡县| 道真| 民乐县| 泾源县| 辉南县| 远安县|