使用 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'];
你能帮我解决这个问题吗,我的问题是关于 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'];