用 PHP 调用 MySQL 存储过程

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

MySQL 5.0 以上支持存储过程。
    PHP 5.0 以上的 mysqli 系列函数可以支持操作 MySQL 的存储过程。
    以下是一些简单的存储过程和用 PHP 调用的示例。

    一、返回单个数据:

 
  1. 1:  <?php 2:    header(”Content-Type:text/html;charset=utf-8″); 3:    4:    $host = “localhost”; 5:    $user = “root”; 6:    $password = “mypassword”; 7:    $db = “test_store_proc”; 8:    $dblink = mysqli_connect($host$user$password$dbor die(”can’t connect to mysql”); 9:   10:    $dblink->query(’SET NAMES UTF8′);11:    if ($result = $dblink->query(”CALL sp_test0(@num, @x, 123)”))12:    {13:      $rs = $dblink->query(”select @num”);14:      $row = $rs->fetch_array();15:      echo $row[’@num’], ‘<br>’;16:   17:      $rs = $dblink->query(”select @x”);18:      $row = $rs->fetch_array();19:      echo $row[’@x’];20:   21:      mysqli_free_result($rs);22:    }23:    else24:      echo ‘error…’;25:    mysqli_close($dblink);26:   27:  /*28:  – Procedure “sp_test0″ DDL29:  CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_test0`(OUT num INT, OUT x VARCHAR(16), IN n INT)30:  BEGIN31:    DECLARE nouse int;32:    DECLARE tmp int;33:   34:    SELECT nId INTO nouse FROM open_news WHERE nID=39;35:    SELECT count(*) INTO tmp FROM open_news;36:    SET num = tmp;37:   38:    SET x = ‘XXX’;39:  END;40:  */41:  ?>42:    

 

二、返回结果集:

 
  1. :  <?php 2:    header(”Content-Type:text/html;charset=utf-8″); 3:    4:    $host = “localhost”; 5:    $user = “root”; 6:    $password = “mypassword”; 7:    $db = “test_store_proc”; 8:    $dblink = mysqli_connect($host$user$password$dbor die(”can’t connect to mysql”); 9:   10:    $dblink->query(’SET NAMES UTF8′);11:    if ($result = $dblink->query(”call sp_test1()”))12:    {13:      while$row = $result->fetch_array())14:      {15:        echo ($row[’nId’]. “–” . $row[’sTopic2′] . “<br>”);16:      }17:      mysqli_free_result($result);18:    }19:    else20:      echo ‘error…’;21:    mysqli_close($dblink);22:   23:  /*24:  – Procedure “sp_test1″ DDL25:  CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_test1`()26:  BEGIN27:     SELECT * FROM open_news WHERE nId<40;28:  END;29:  */30:  ?> 

 

 三、返回多个结果集:

 
  1. :  <?php 2:    header(”Content-Type:text/html;charset=utf-8″); 3:    4:    $host = “localhost”; 5:    $user = “root”; 6:    $password = “mypassword”; 7:    $db = “test_store_proc”; 8:    9:    $dblink = new mysqli($host$user$password$db);10:    if (mysqli_connect_errno())11:    {12:      print(’Can not connect to MySQL server’);13:      exit;14:    }15:    else16:      print(’?????? MySQL ????????<br>’);17:   18:    $dblink->query(’SET NAMES UTF8′);19:    $rows = array();20:    if($dblink->real_query(”CALL sp_test2()”))21:    {22:      do23:      {24:        if($result = $dblink->store_result())25:        {26:          while ($row = $result->fetch_assoc())27:          {28:            array_push($rows$row);29:          }30:          $result->close();31:        }32:      }33:      while($dblink->next_result());34:    }35:    else36:      echo ‘error…’;37:   38:    $dblink->close();39:   40:    print_r($rows);41:  /*42:  – Procedure “sp_test2″ DDL43:  CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_test2`()44:  BEGIN45:    SELECT nId,sTopic2 FROM open_news LIMIT 0, 5;46:    SELECT count(nId) AS counter FROM open_news;47:  END;48:  */49:  ?> 

 













本文转自网眼51CTO博客,原文链接:http://blog.51cto.com/itwatch/286529,如需转载请自行联系原作者

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6天前
|
数据库
基于PHP+MYSQL开发制作的趣味测试网站源码
基于PHP+MYSQL开发制作的趣味测试网站源码。可在后台提前设置好缘分, 自己手动在数据库里修改数据,数据库里有就会优先查询数据库的信息, 没设置的话第一次查询缘分都是非常好的 95-99,第二次查就比较差 , 所以如果要你女朋友查询你的名字觉得很好 那就得是她第一反应是查和你的缘分, 如果查的是别人,那不好意思,第二个可能是你。
20 3
|
27天前
|
NoSQL 关系型数据库 MySQL
linux服务器重启php,nginx,redis,mysql命令
linux服务器重启php,nginx,redis,mysql命令
32 1
|
1月前
|
存储 SQL 关系型数据库
MySQL数据库进阶第四篇(视图/存储过程/触发器)
MySQL数据库进阶第四篇(视图/存储过程/触发器)
|
1月前
|
存储 关系型数据库 MySQL
MySQL周内训参照5、存储过程创建
MySQL周内训参照5、存储过程创建
35 1
|
1月前
|
存储 SQL 关系型数据库
在MySQL中使用存储过程返回更新前的记录
在MySQL中使用存储过程返回更新前的记录
15 0
|
1月前
|
存储 关系型数据库 MySQL
索引的威力--记一次MySQL存储过程优化
在MySQL存储过程中,一个`INSERT INTO SELECT`语句起初执行超过130秒,优化后,执行时间降低到1秒内,实现了100倍的性能提升。问题在于`NOT IN`子查询导致的慢查询,最终通过创建单列索引获得了最佳效果。文章还介绍了索引创建的基本语法,并讨论了单列索引与组合索引的优缺点。作者强调,随着数据量增加,索引对于查询性能的重要性,计划未来采用读写分离来进一步优化处理大量插入和查询的场景。
|
1月前
|
前端开发 关系型数据库 MySQL
使用 PHP 和 MySQL 实现留言板功能
使用 PHP 和 MySQL 实现留言板功能
45 0
|
10月前
|
关系型数据库 MySQL PHP
PHP 原生操作 Mysql
PHP 原生操作 Mysql
99 0
|
10月前
|
关系型数据库 MySQL 数据库连接
PHP 原生连接 Mysql
PHP 原生连接 Mysql
125 0
|
2月前
|
关系型数据库 MySQL PHP