0
我針對多個應用程序共享的數據存儲區使用了一些存儲過程,需要調用具有INOUT
參數的存儲過程。PHP MySQL PDO存儲過程和INOUT參數
從技術文檔這樣的工作有點像
$prob_param = null;
$stmt = $pdo->prepare('CALL obnoxiousStoredProc(:problem_param)');
$stmt->bindParam(':problem_param', $prob_param, PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT, 11);
$stmt->execute();
echo 'Prob param: ' . var_export($prob_param, true);
,我們將看到類似
Prob param: int(420)
但還有就是防止這種預期See this answer工作中的錯誤。
所以不是我們得到
Syntax error or access violation: 1414 OUT or INOUT argument $parameter_number for routine $procedure_name is not a variable or NEW pseudo-variable
的解決方法,如答案描述是雙重的,獨立的輸入和輸出參數(我可以讓我的DBA辦)和使用局部變量
eg
$stmt = $pdo->prepare('CALL obnoxiousStoredProc(@problem_param)');
,然後使用第二個查詢
SELECT @problem_param
爲了讓你的價值。
我的問題是:PDO中這個「局部變量」的範圍是什麼?如果我的php代碼正在同時進行,我是否將自己設置爲競賽條件?
謝謝!我能否看到與PDO持續連接的衝突? – wmarbut
您不會看到「碰撞」 - 該變量可能具有舊值,但您的查詢無論如何都會給它一個新值。也就是說,您應該避免在MySQL中持久連接,因爲連接狀態可能會持續存在(例如,表格左鎖定,事務處於打開狀態等),這是一個微妙的錯誤來源。 –