我剛開始使用PHP PDO和MySQL存儲過程,並且我在如何從過程調用中獲取OUT參數時遇到了問題。我看了很多類似的stackoverflow主題,但不幸的是我找不到解決我的問題的方法:|PHP PDO無法獲得OUT參數值
下面是詳細信息:
該過程需要1個輸入參數,並且具有2個強制輸出參數,並返回在其中產生狀態。
這是我怎麼稱呼它:
$input = 5;
$mydb = new PDO("mysql:host=localhost;dbname=mydb", "user", "pass");
$proc = $mydb->prepare("CALL proc_name($input, @o_code, @o_message)");
$proc->execute();
程序在@o_message參數@o_code參數和返回STRING INT。 如果它是從CLI調用,調用後我在CLI
select @o_code, @o_message;
萬事OK寫的,這是我能看到這些OUT參數返回的值。 但是我無法從PHP代碼中完成 - 出於某種原因,我總是得到FALSE結果。該程序是正確的工作,但我不能得到它的結果。
我嘗試以下方法得到的值,之後我做出上述呼籲:
$output = $proc->fetch(PDO::FETCH_ASSOC); // also with PDO:FETCH_OBJ
$output = $mydb->query("select @o_code, @o_message");
$output = $mydb->query("select @o_code, @o_message")->fetch();
$output = $mydb->query("select @o_code, @o_message")->fetchColumn();
$output = $mydb->query("select @o_code, @o_message")->fetchAll();
但這些都不返回NULL從或FALSE不同的任何結果。我也嘗試bindParam,但仍然無法使它工作。
謝謝你對這個問題和美好的一天的任何幫助!
----- -----編輯
這裏是我與bindParam,試圖代碼仍然不工作:
$input = 5;
$proc = $mydb->prepare("CALL proc_name(?, ?, ?)");
$proc->bindParam(1, $input, PDO::PARAM_INT);
$proc->bindParam(2, $code, PDO::PARAM_INT);
$proc->bindParam(3, $message, PDO::PARAM_STR);
$proc->execute();
var_dump($code, $message); // NULL, NULL
發現:http://stackoverflow.com/a/32224294/2717254 –
,你指向的問題是一個不同的問題,它不能解決這裏發佈的問題的問題。你可以在下面檢查接受的答案,看看是否應該調用「closeCursor()」函數來正常工作。在另一個問題中你的答案確實有這樣的代碼行,所以我的猜測是它也不起作用。 – middlehut
答案是關於獲取輸出參數值!不涉及closeCursor()調用。我更新了答案,以澄清更好的順便說一句 –