複数のアプリケーションで共有されているデータストアに対していくつかのストアドプロシージャを使用しており、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)
しかし、これが期待どおりに機能しないバグがあります。この回答を参照してください。
代わりに
Syntax error or access violation: 1414 OUT or INOUT argument $parameter_number for routine $procedure_name is not a variable or NEW pseudo-variable
回避策は、回答で説明されているように2つあり、入力パラメーターと出力パラメーターを分離し(DBAに実行させることができます)、ローカル変数を使用します
例えば
$stmt = $pdo->prepare('CALL obnoxiousStoredProc(@problem_param)');
次に、2番目のクエリを使用します
SELECT @problem_param
あなたの価値を得るために。
私の質問は、PDOのこの「ローカル変数」の範囲は何ですか?PHPコードが同時に取得されている場合、競合状態に自分自身を設定していますか?