调用存储过程需使用 prepare() 绑定参数,通过 execute() 执行并获取结果。out 参数在绑定阶段必须指定为 pdo::param_input_output 类型,执行后直接从变量中读取;结果集则通过 fetch() 或 fetchall() 获取。

如何正确绑定 OUT 参数以获取返回值?
必须将变量作为引用传入 bindParam() 或 bindValue(),并将数据类型设为 PDO::PARAM_INPUT_OUTPUT。这样 PDO 才能在存储过程执行完毕后,将服务器端计算出的值回写到该 PHP 变量中。

$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$proc = $pdo->prepare('CALL get_user_count(@cnt)');
$cnt = 0;
$proc->bindParam(1, $cnt, PDO::PARAM_INT | PDO::PARAM_INPUT_OUTPUT);
$proc->execute();
echo "Count: $cnt";
如何同时处理 OUT 参数和结果集?
当存储过程既返回数据行又修改 OUT 参数时,需先遍历结果集,再访问已绑定的变量。PDO 默认只返回第一个结果集,若存在多个结果集需调用 nextRowset()。

$stmt = $pdo->prepare('CALL complex_proc(:id, @out_status)');
$id = 1;
$status = '';
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
$stmt->bindParam(':out_status', $status, PDO::PARAM_STR | PDO::PARAM_INPUT_OUTPUT);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo "Status: $status";
如果存储过程没有返回结果集只有 OUT 参数怎么办?
此时无需调用 fetch(),直接检查绑定变量的值即可。若未绑定输出参数而尝试读取,将导致空值或错误。确保参数顺序与存储过程定义一致,且类型匹配。











