在PHP PDO 中從MySQL 預存程序檢索變數
本討論旨在提供使用PHPMy從變數方案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
$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中文網其他相關文章!