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

Handle output parameter from MySQL SP with PHP PDO

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

我创建了一个名为 selectAVG 的非常简单的存储过程,它 returns 通过输出参数计算受试者的平均成绩,这是我创建的一个存储过程,用于测试我的代码(我不能post 由于我老板的缘故,代码参考了 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());
}

我的问题是我无法通过简单的 echo 获取输出值,我必须使用 print_r 才能获取此值:

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

但我只想得到一个简单的 5,我需要做什么才能显示例如:echo "the total is:" .$total 并得到这个:总数是 5 ?

您可以执行其中任一操作。

这就是如何对数组中的项目进行寻址。

echo $r[0];

echo $r['@total']

或者

可能会更好
$r = $conn->query('select @total as total')->fetch();

echo $r['total']

因为我不确定 PHP 是否想要数组中出现 @ 符号。

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

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

如果您有 PHP 5.4 或更高版本,那么取消引用也将有效:

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