我正在对多个应用程序共享的数据存储使用一些存储过程,并且需要调用具有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
如答案中所述,解决方法是双重的,将输入和输出参数分开(我可以让我的 DBA 来做)并使用局部变量
例如
$stmt = $pdo->prepare('CALL obnoxiousStoredProc(@problem_param)');
然后使用第二个查询
SELECT @problem_param
获得你的价值。
我的问题是:PDO 中这个“局部变量”的范围是什么?如果我的 php 代码同时获取,我是否将自己设置为竞争条件?