您好,UncleToo欢迎您!  为了更好的浏览本站,请使用高版本浏览器
RSS  Tag     设为首页 | 加入收藏
 您所在的位置:首页 > 数据库技术 > MySQL

MySQL教程:存储过程返回多个值

作者:UncleToo  来源:原创  日期:2014-12-08 11:32:15
收藏  评论:( 0 )  阅读:590

       关于MySQL存储过程的教程、实例,本站其他文章也有所介绍,在本节MySQL教程中,我们将介绍存储过程如何返回多个值。这里我们会用到 INOUT 或 OUT 两个参数,如果你对这两个参数还不太了解,请参考本站其他文章或MySQL中文手册

这里有一张订单表orders,表结构如下:

下面,我们就常见存储过程,通过客户编号查询出该客户已完成的订单、取消的订单、待处理订单的数量。

CREATE PROCEDURE get_order_by_cust(IN cust_no INT,
 OUT ord1 INT,
 OUT ord2 INT,
 OUT ord3 INT)
BEGIN
 -- 已完成订单
 SELECT
            count(*) INTO ord1
        FROM
            orders
        WHERE
            customerNumber = cust_no
                AND status = '1';
 -- 取消的订单
 SELECT
            count(*) INTO ord2
        FROM
            orders
        WHERE
            customerNumber = cust_no
                AND status = 2
 -- 待处理订单
 SELECT
            count(*) INTO ord3
        FROM
            orders
        WHERE
            customerNumber = cust_no
                AND status = '3';
END

在上面这个存储过程中,我们使用了 IN 和 OUT 两个参数分别用作输入和输出。下面我们执行这个存储过程:

CALL get_order_by_cust(141,@ord1,@ord2,@ord3);
SELECT @ord1,@ord2,@ord3;

输出结果如下:

关于MySQl存储过程返回多个值我们就介绍完了,下面是PHP调用返回多个值的存储过程的方法实例:

<?php
/**
 * Call stored procedure that return multiple values
 * @param $customerNumber
 * From UncleToo.Com
 */
function call_sp($customerNumber)
{
    try {
        $conn = new PDO("mysql:host=localhost;dbname=uncletoo", 'root', '');
        // 执行存储过程
        $sql = 'CALL get_order_by_cust(:no,@ord1,@ord2,@ord3)';
        $stmt = $conn->prepare($sql);
        $stmt->bindParam(':no', $customerNumber, PDO::PARAM_INT);
        $stmt->execute();
        $stmt->closeCursor();
        // 获取返回值
        $r = $conn->query("SELECT @ord1,@ord2,@ord3")
                  ->fetch(PDO::FETCH_ASSOC);
        if ($r) {
            printf('ord1: %d, ord1: %d, ord3: %d,
                $r['@ord1'],
                $r['@ord2'],
                $r['@ord3']);
        }
    } catch (PDOException $pe) {
        die("Error occurred:" . $pe->getMessage());
    }
}
call_sp(141);
?>




除非特别声明,本站所有PHP教程及其他教程/文章均为原创、翻译或网友投稿,版权均归UncleToo中文网所有, 转载请注明作者及出处。
原文网址:http://www.uncletoo.com/html/mysql/1064.html
读完这篇文章后,你是否有所收获? 分享是一种生活的信念!
  • 0
  • 0
我来说两句
更多>>网友评论