使用 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 参数。以下步骤概述了正确的方法:
准备 PDO 语句:
$stmt = $db->prepare("CALL proc_OUT(?)");
绑定OUT 参数:
$stmt->bindParam(1, $return_value, PDO::PARAM_STR, 4000);
执行存储过程:
$stmt->execute();
查询 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中文网其他相关文章!