在 PHP PDO 中从 MySQL 存储过程检索变量
本讨论旨在提供使用 PHP 从 MySQL 存储过程检索变量的全面解决方案PDO。
问题
尝试从 PHP PDO 中的 MySQL 存储过程获取 LAST_INSERT_ID() 时,遇到实现的代码无法运行的情况。
解决方案
不幸的是,这个问题可以归因于 PHP 处理带有 OUT 参数的 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 参数,可以使用以下代码示例和提示:
提示:
示例代码:
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中文网其他相关文章!