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 // |
在用戶端,我們給出如下的程式:
| 代碼如下 |
複製代碼 |
if (!mysql_connect("localhost","root","welefen")){ echo "串連資料庫失敗"; } if (!mysql_select_db("welefen")){ echo "選擇資料庫表失敗 "; } $insert_user=array("welefen","welefen");//這裡的welefen分別為使用者名稱、密碼 if (mysql_query("call insertuser('$insert_user[0]','$insert_user[1]')")){ echo "添加使用者$insert_user[0]成功 "; }else { echo "添加使用者$insert_user[0]失敗 "; } $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]驗證正確 "; }else { echo "使用者$validate_user[0]驗證錯誤 "; } $modify_Pwd=array("welefen","weilefeng"); //welefen為使用者名稱weilefeng為新密碼 if (mysql_query("call modifyPwd('$modify_Pwd[0]','$modify_Pwd[1]')")){ echo "使用者$modigy_Pwd[0]的密碼修改成功 "; }else { echo "使用者$modigy_Pwd[0]的密碼修改失敗 "; } $delete_user=array("welefen"); //welefen為使用者名稱 if (mysql_query("call deleteuser('$delete_user[0]')")){ echo "使用者$delete_user[0]刪除成功 "; }else { echo "使用者$delete_user[0]刪除失敗 "; } ?> |
這樣就完成了,php調用mysql的預存程序,其實這些簡單的應用,就用不上預存程序了,實際的應用是比這個複雜的多. 可以看出,建立了mysql的預存程序可以極大的減少了客服端的壓力,但是增加了資料庫服務的壓力,各種利弊得實際去衡量.
http://www.bkjia.com/PHPjc/632923.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/632923.htmlTechArticlephp與mysql本來就是天生的一對了,下面我來介紹在php程式中怎麼調用在mysql中己經寫好的預存程序,大家一起來看看具體實現方法。 Mysql儲存...