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

首頁 > 開發 > PHP > 正文

php程序中調用mysql存儲過程實例

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

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 {  //開源代碼Vevb.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的存儲過程可以極大的減少了客服端的壓力,但是增加了數據庫服務的壓力,各種利弊得實際去衡量.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 湖北省| 苗栗市| 辉县市| 宁波市| 抚州市| 梅河口市| 台东市| 城步| 扶余县| 仙居县| 景洪市| 台南县| 勃利县| 龙海市| 通江县| 柳河县| 天峻县| 潍坊市| 杭锦旗| 叙永县| 锡林郭勒盟| 永兴县| 岗巴县| 鄱阳县| 安新县| 交口县| 门源| 沛县| 焦作市| 大余县| 舞钢市| 鄄城县| 邓州市| 将乐县| 开封市| 成都市| 靖边县| 西盟| 邢台市| 土默特右旗| 乃东县|