如何在 PHP PDO 中从 MySQL 存储过程检索变量?

Patricia Arquette
发布: 2024-11-06 18:13:03
原创
252 人浏览过

How to Retrieve Variables from MySQL Stored Procedures in PHP PDO?

在 PHP PDO 中从 MySQL 存储过程检索变量

本讨论旨在提供使用 PHP 从 MySQL 存储过程检索变量的全面解决方案PDO。

问题

尝试从 PHP PDO 中的 MySQL 存储过程获取 LAST_INSERT_ID() 时,遇到实现的代码无法运行的情况。

解决方案

不幸的是,这个问题可以归因于 PHP 处理带有 OUT 参数的 MySQL 存储过程的长期存在的错误。

多步骤过程

解决方法涉及两步过程:

  1. 使用输入变量执行过程:使用您的输入执行过程并指定用于存储结果的 MySQL 变量。
  2. 查询变量:运行单独的查询以选择包含结果的 MySQL 变量。

使用变量进行过程调用

在提供的 PHP 代码中,将有问题的绑定替换为以下内容:

$stmt = $db->prepare("CALL simpleProcedure(:name, @returnid)");
登录后复制

这将 PHP 变量 $name 绑定到输入参数并创建一个名为 @returnid 的 MySQL 变量来存储输出。 @ 符号表示 returnid 是 MySQL 变量。

选择变量

过程执行后,使用以下查询检索 @returnid 变量:

$result = $db->query("SELECT @returnid AS result_id");
$row = $result->fetch();
$returnid = $row['result_id'];
登录后复制

使用 OUT 参数的替代方法

如果需要更完整的解决方案,包括使用 INOUT 和 OUT 参数,可以使用以下代码示例和提示:

提示:

  • 将 PDO 的 ATTR_EMULATE_PREPARES 设置为 true,以便更好地处理错误。
  • 仅将 PHP 变量绑定到 IN 参数。

示例代码:

SQL 过程:

CREATE PROCEDURE demoSpInOutSqlVars(IN pInput_Param INT, INOUT pInOut_Param INT, OUT pOut_Param INT)
BEGIN
    SET pInOut_Param = ABS(pInput_Param) + ABS(pInOut_Param);
    SET pOut_Param = ABS(pInput_Param) * -3;
END
登录后复制

PHP 代码:

$phpInParam = 5;
$phpInOutParam = 404;
$phpOutParam = null;

$stmt = $db->prepare("CALL demoSpInOutSqlVars(:phpInParam, @varInOutParam, @varOutParam)");
$stmt->bindParam(':phpInParam', $phpInParam, PDO::PARAM_INT);
$db->exec("SET @varInOutParam = $phpInOutParam");
$stmt->execute();

$result = $db->query("SELECT @varInOutParam AS phpInOutParam, @varOutParam AS phpOutParam FROM dual");
$row = $result->fetch();

$phpInOutParam = $row['phpInOutParam'];
$phpOutParam = $row['phpOutParam'];
登录后复制

以上是如何在 PHP PDO 中从 MySQL 存储过程检索变量?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板