0

複数のアプリケーションで共有されているデータストアに対していくつかのストアドプロシージャを使用しており、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コードが同時に取得されている場合、競合状態に自分自身を設定していますか?

4

2 に答える 2

1

ユーザー定義変数は接続固有です。

ドキュメントを参照してください。

したがって、php実行コンテキストで競合状態が発生する可能性はありません。

于 2012-09-19T19:29:57.247 に答える
0

この解決策は私のために働いた:

$pdo = new PDO(...);
$stmt = $pdo->prepare('CALL obnoxiousStoredProc(@problem_param)');
$stmt->execute();

$stmt2 = $pdo->prepare('SELECT @problem_param');
$stmt2->execute();
$var = $stmt->fetch();

var_dump($var)
于 2020-07-25T00:01:15.380 に答える