您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

详解php调用MySQL存储过程方法_PHP教程

2025/1/13 14:31:23发布37次查看
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()等函数获得结果。
下面我总结了一些调用存储过程的实例无参的存储过程
 代码如下 复制代码
$conn = mysql_connect('localhost','root','root') or die (数据连接错误!!!);
mysql_select_db('test',$conn);
$sql =
create procedure myproce()
begin
insert into user (id, username, sex) values (null, 's', '0');
end;
;
mysql_query($sql);//创建一个myproce的存储过程
$sql = call test.myproce();;
mysql_query($sql);//调用myproce的存储过程,则数据库中将增加一条新记录。
型一:调用带输入、输出类型参数的方法
 代码如下 复制代码
$returnvalue = '';
try {
 mysql_query ( set @return );
 $spname = 'p__test_getinfo1';
 mysql_query ( call $spname(@return, '{$userid}', '{$pwd}') ) or die ( [$spname]query failed: . mysql_error () );
 $result_return = mysql_query ( select @return );
 $row_return = mysql_fetch_row ( $result_return );
 $returnvalue = $row_return [0];
} catch ( exception $e ) {
 echo $e;
}
echo $returnvalue; //输出来自存储过程中输出的变量
类型二:调用带多个输出类型和多个输入类型参数的方法
 代码如下 复制代码
$userid = 0;
try{
    mysql_query(set @message);
    mysql_query(set @id);
    mysql_query(call p__test_login(@message, @id, '{$userid}', '{$pwd}'), $conn) or die(query failed:.mysql_error());
    $result_mess = mysql_query(select @message);
    $result_uid = mysql_query(select @id);
    $row_mess = mysql_fetch_row($result_mess);
    $row_uid = mysql_fetch_row($result_uid);
    $proc_error = $row_mess[0];
    $uid = $row_uid[0];
}
catch( exception $e )
{
   echo $e;
}
echo 'proc return message:'$proc_error.'
'; //输出来自存储过程中输出的变量
echo 'user id:'.$uid; //获取用户id
类型三:调用带返回结果集的方法
 代码如下 复制代码
try {
 $spname = 'p__test_getdata';
 $query = mysql_query ( call $spname(), $conn ) or die ( [$spname]query failed:.mysql_error() );
 while ( $row = mysql_fetch_array ( $query ) ) {
  echo $row ['provinceid'].'::'.$row ['provincename']; //输出数据集
 }
} catch ( exception $e ) {
 echo $e;
}
类型四:调用带返回多个结果集的方法(目前只能通过mysqli来实现~~)
 代码如下 复制代码
//php
$rows = array (); 
$db = new mysqli($server,$user,$psd,$dbname); 
if (mysqli_connect_errno()){ 
    $this->message('can not connect to mysql server'); 

$db->query(set names utf8); 
$db->query(set @message);
if($db->real_query(call p__test_getdata2(@message))){ 
    do{ 
        if($result = $db->store_result()){ 
            while ($row = $result->fetch_assoc()){ 
                array_push($rows, $row); 
            } 
            $result->close(); 
        } 
    }while($db->next_result()); 

$db->close();
print_r($rows);
//procedure
……
select * from t1 where ……
select * from t2 where ……
……
实例四:传出参数的inout存储过程
 代码如下 复制代码
$sql =
create procedure myproce4(inout sexflag int)
begin
select * from user where sex = sexflag;
end;
;
mysql_query($sql);//创建一个myproce4的存储过程
$sql = set @sexflag = 1;
mysql_query($sql);//设置性别参数为1
$sql = call test.myproce4(@sexflag);;
mysql_query($sql);//调用myproce4的存储过程,在cmd下面看效果
实例五:使用变量的存储过程
 代码如下 复制代码
$sql =
create procedure myproce5(in a int,in b int)
begin
declare s int default 0;
set s=a+b;
select s;
end;
;
mysql_query($sql);//创建一个myproce5的存储过程
$sql = call test.myproce5(4,6);;
mysql_query($sql);//
调用myproce5的存储过程,在cmd下面看效果
实例六:case语法
 代码如下 复制代码
$sql =
create procedure myproce6(in score int)
begin
case score
when 60 then select '及格';
when 80 then select '及良好';
when 100 then select '优秀';
else select '未知分数';
end case;
end;
;
mysql_query($sql);//创建一个myproce6的存储过程
$sql = call test.myproce6(100);;
mysql_query($sql);//
调用myproce6的存储过程,在cmd下面看效果
实例七:循环语句
 代码如下 复制代码
$sql =
create procedure myproce7()
begin
declare i int default 0;
declare j int default 0;
while iset j=j+i;
set i=i+1;
end while;
select j;
end;
;
mysql_query($sql);//创建一个myproce7的存储过程
$sql = call test.myproce7();;
mysql_query($sql);//
调用myproce7的存储过程,在cmd下面看效果
实例八:repeat语句
 代码如下 复制代码
$sql =
create procedure myproce8()
begin
declare i int default 0;
declare j int default 0;
repeat
set j=j+i;
set i=i+1;
until j>=10
end repeat;
select j;
end;
;
mysql_query($sql);//创建一个myproce8的存储过程
$sql = call test.myproce8();;
mysql_query($sql);//
调用myproce8的存储过程,在cmd下面看效果
实例九:loop语句
 代码如下 复制代码
$sql =
create procedure myproce9()
begin
declare i int default 0;
declare s int default 0;
loop_label:loop
set s=s+i;
set i=i+1;
if i>=5 then
leave loop_label;
end if;
end loop;
select s;
end;
;
mysql_query($sql);//创建一个myproce9的存储过程
$sql = call test.myproce9();;
mysql_query($sql);//
调用myproce9的存储过程,在cmd下面看效果
实例十:删除存储过程
 代码如下 复制代码
mysql_query(drop procedure if exists myproce);//删除test的存储过程
实例十:存储过程中的游标
http://www.bkjia.com/phpjc/630700.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/630700.htmltecharticlephp与mysql是天生的一对,下面我来介绍在php中怎么调用mysql存储过程并执行返回结果,下面我总结了一些常用的php调用mysql存储过程的方法,...
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product