热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php调用MySQL存储过程方法

php与mysql是天生的一对,下面我来介绍在php中怎么调用mysql存储过程并执行返回结果,下面我总结了一些常用的php调用MySQL存储过程的方法,有需要了解的同学可参考.MySQL从5....
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;//开源代码phprm.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.'
'; //输出来自存储过程中输出的变量 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的存储过程

本文地址:

转载随意,但请附上文章地址:-)

推荐阅读
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 推荐一个ASP的内容管理框架(ASP Nuke)的优势和适用场景
    本文推荐了一个ASP的内容管理框架ASP Nuke,并介绍了其主要功能和特点。ASP Nuke支持文章新闻管理、投票、论坛等主要内容,并可以自定义模块。最新版本为0.8,虽然目前仍处于Alpha状态,但作者表示会继续更新完善。文章还分析了使用ASP的原因,包括ASP相对较小、易于部署和较简单等优势,适用于建立门户、网站的组织和小公司等场景。 ... [详细]
  • 本文介绍了如何在MySQL中将零值替换为先前的非零值的方法,包括使用内联查询和更新查询。同时还提供了选择正确值的方法。 ... [详细]
  • 在数据分析工作中,我们通常会遇到这样的问题,一个业务部门由若干业务组构成,需要筛选出每个业务组里业绩前N名的业务员。这其实是一个分组排序的 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
author-avatar
掩飾獨殇_389
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有