php调用MySQL存储过程方法
发布:smiling 来源: PHP粉丝网 添加日期:2014-09-10 14:45:05 浏览: 评论:0
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;//开源代码phpfensi.com
- ";
- 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.'<br/>'; //输出来自存储过程中输出的变量
- 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 i<10 do
- set 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的存储过程
Tags: php调用MySQL MySQL存储过程
- 上一篇:解决php5.3不能连接mssql数据库问题
- 下一篇:php数据库备份类程序代码
相关文章
- ·php程序中调用mysql存储过程实例(2014-09-10)
- ·PHP调用MySQL存储过程并返回值实现程序(2014-09-10)
- ·PHP调用MySQL存储过程并返回值的方法(2021-05-04)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)