请你帮我解决这个问题,我的问题是关于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?
答案 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是否希望在数组中出现@
符号。