首頁 >資料庫 >mysql教程 >如何在 PHP PDO 中從 MySQL 預存程序檢索變數?

如何在 PHP PDO 中從 MySQL 預存程序檢索變數?

Patricia Arquette
Patricia Arquette原創
2024-11-06 18:13:03304瀏覽

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

在PHP PDO 中從MySQL 預存程序檢索變數

本討論旨在提供使用PHPMy從變數方案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

$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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn