php相當(dāng)于執(zhí)行mysql的終端,即模擬mysql的客戶端,所以符號(hào)sql標(biāo)準(zhǔn)的語(yǔ)句都是可以執(zhí)行的。
創(chuàng)新互聯(lián)于2013年開(kāi)始,先為呼倫貝爾等服務(wù)建站,呼倫貝爾等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為呼倫貝爾企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
存儲(chǔ)是由數(shù)據(jù)庫(kù)本身建立起來(lái)的,與php沒(méi)有關(guān)系,
具體查看mysql的命令
CREATE
[DEFINER = { user | CURRENT_USER }]
PROCEDURE sp_name ([proc_parameter[,...]])
[characteristic ...] routine_body
直接處理存儲(chǔ)過(guò)程的輸出參數(shù)即可。
調(diào)用存儲(chǔ)過(guò)程的方法。
a。如果存儲(chǔ)過(guò)程有 IN/INOUT參數(shù),聲明一個(gè)變量,輸入?yún)?shù)給存儲(chǔ)過(guò)程,該變量是一對(duì),
一個(gè)php變量(也可以不必,只是沒(méi)有php變量時(shí),沒(méi)有辦法進(jìn)行動(dòng)態(tài)輸入),一個(gè)Mysql
變量。
b。如果存儲(chǔ)過(guò)程有OUT變量,聲明一個(gè)Mysql變量。
mysql變量的聲明比較特殊,必須讓mysql服務(wù)器知道此變量的存在,其實(shí)也就是執(zhí)行一條mysql語(yǔ)句。
入set @mysqlvar=$phpvar ;
c。使用mysql_query()/mysql_db_query()執(zhí)行mysql 變量聲明語(yǔ)句。
mysql_query("set @mysqlvar【=$pbpvar】");
這樣,在mysql服務(wù)器里面就有一個(gè)變量,@mysqlar。如果時(shí)IN參數(shù),那么其值可以有phpar傳入。
d。 如果時(shí)存儲(chǔ)過(guò)程。
1。執(zhí)行 call procedure()語(yǔ)句。
也就是mysql_query("call proceduer([var1]...)");
2. 如果有返回值,執(zhí)行select @ar,返回執(zhí)行結(jié)果。
mysql_query("select @var)"
接下來(lái)的操作就和php執(zhí)行一般的mysql語(yǔ)句一樣了??梢酝ㄟ^(guò)mydql_fetch_row()等函數(shù)獲得結(jié)果。
如果時(shí)函數(shù)。 直接執(zhí)行 select function() 就可以了。
傳出參數(shù)的存儲(chǔ)過(guò)程:
$sql = "
create procedure myproce3(out score int)
begin
set score=100;
end; ";
mysql_query($sql);//創(chuàng)建一個(gè)myproce3的存儲(chǔ)過(guò)程
$sql = "call test.myproce3(@score);";
mysql_query($sql);//調(diào)用myproce3的存儲(chǔ)過(guò)程
$result = mysql_query('select @score;');
$array = mysql_fetch_array($result);
echo 'pre';print_r($array);
直接上代碼:
mysql_connect("localhost","user","pwd");
mysql_select_db('testdata')?or?die?(mysql_error());
$sql?=?"create?procedure?tb_neaten?(in?rec?int,in?pa?varchar(15),in?qy?decimal(10,2),in?ar?varchar(6))
begin
update?test1?set?qty=qty-qy?where?recordnum=rec;
insert?into?test2?set?bname=pa,area=ar,qty=qy,date=date_format(now(),'%Y%m%d'),time=date_format(now(),'%Y%m%d');
end;";
mysql_query($sql)?or?die?(mysql_error());
若是存儲(chǔ)過(guò)程里含有捕獲select結(jié)果的語(yǔ)句時(shí),需在mysql_connect時(shí)調(diào)整參數(shù)
mysql_connect("localhost","user","password",1,131072)?
執(zhí)行時(shí),直接運(yùn)行
mysql_query(tb_neaten(va1,va2,va3,va4));