使用PHP PDO处理来自MySQL SP的输出参数

时间:2015-04-16 23:52:34

标签: php mysql stored-procedures pdo

请你帮我解决这个问题,我的问题是关于MySQL中的PHP,PDO和存储过程。

我创建了一个非常简单的存储过程,名为selectAVG,它通过输出参数返回主题的平均等级,这里是我为了测试我的代码而创建的存储过程(我无法将代码重新发布到selectAVG)因为我的老板)但我希望通过这个你能赶上整个想法。

DELIMITER $$

USE `ejemplo`$$

DROP PROCEDURE IF EXISTS `selectCount_sp`$$

CREATE DEFINER=`root`@`localhost`
PROCEDURE `selectCount_sp`(
OUT totalEmpleados INT    <-- out parameter
)
BEGIN  
      SELECT COUNT(Nombre) INTO totalEmpleados FROM empleado_php;
END$$

DELIMITER ;

这是我的script.php,它的作用是调用存储过程并通过输出参数获取员工总数

try {   
    $conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    $sql = 'CALL selectCount_sp(@total)';
    $stmt = $conn->prepare($sql);
    $stmt->execute();

    $stmt->closeCursor(); //permite limpiar y ejecutar la segunda query

    $r = $conn->query('select @total')->fetch();
        print_r ($r);
    }
catch (PDOException $pe) {
    die("Error occurred:" . $pe->getMessage());
}

我的问题是我无法通过简单的回声获得输出值,我必须使用print_r才能得到这个:

Array ( [@total] => 5 [0] => 5 )

但我只是想得到一个简单的5,我需要做些什么来展示例如:echo&#34;总数是:&#34; 。$ total并且有:总数是5?

2 个答案:

答案 0 :(得分:1)

在这种情况下,您可以使用->fetchColumn()

$r = $conn->query('select @total');
$total = $r->fetchColumn();

如果你有PHP 5.4或更高版本,那么解引用也会有效:

$total = $conn->query('select @total')->fetch(PDO::FETCH_ASSOC)['@total'];

答案 1 :(得分:0)

你可以做其中任何一种。

这就是如何处理数组中的项目。

echo $r[0];

echo $r['@total']

或者它可能更好

$r = $conn->query('select @total as total')->fetch();

echo $r['total']

因为我不确定PHP是否希望在数组中出现@符号。