如何使用 PDO 从带有 OUT 参数的存储过程中检索输出?

Linda Hamilton
发布: 2024-11-07 08:12:02
原创
797 人浏览过

How to Retrieve Output from Stored Procedures with OUT Parameters Using PDO?

使用 PDO 调用带有 OUT 参数的存储过程

在数据库编程中,存储过程对于封装复杂的数据库操作至关重要。使用 PDO 从存储过程中检索输出可能具有挑战性。

问题:
使用 PDO 调用带有 OUT 参数的存储过程时,您可能会遇到如下错误:

PDOException: SQLSTATE[42000]: Syntax error or access violation: 1414 OUT or INOUT argument 1 for routine mydb.proc_OUT is not a variable or NEW pseudo-variable in BEFORE trigger
登录后复制

解决方案:
PDO 希望使用单独的查询检索 OUT 参数。以下步骤概述了正确的方法:

  1. 准备 PDO 语句:

    $stmt = $db->prepare("CALL proc_OUT(?)");
    登录后复制
  2. 绑定OUT 参数:

    $stmt->bindParam(1, $return_value, PDO::PARAM_STR, 4000);
    登录后复制
  3. 执行存储过程:

    $stmt->execute();
    登录后复制
  4. 查询 OUT 参数:

    $stmt2 = $db->query("SELECT @return_value");
    $row = $stmt2->fetch(PDO::FETCH_NUM);
    $return_value = $row[0];
    登录后复制

示例:
下面是使用 OUT 参数调用存储过程的示例:

$db = new PDO("mysql:host=localhost;dbname=mydb", "username", "password");

// Stored procedure definition
$sql = "CREATE PROCEDURE proc_OUT (OUT var1 VARCHAR(100))
BEGIN
    SET var1 = 'This is a test';
END";
$db->query($sql);

// Call the stored procedure
$stmt = $db->prepare("CALL proc_OUT(?)");
$stmt->bindParam(1, $return_value, PDO::PARAM_STR, 4000);
$stmt->execute();

// Query the OUT parameter
$stmt2 = $db->query("SELECT @return_value");
$row = $stmt2->fetch(PDO::FETCH_NUM);
$return_value = $row[0];

echo $return_value; // Output: 'This is a test'
登录后复制

按照这种方法,您可以使用 PDO 成功调用带有 OUT 参数的存储过程。

以上是如何使用 PDO 从带有 OUT 参数的存储过程中检索输出?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!