PHP PDO não pode obter o valor do parâmetro OUT
Acabei de começar a usar o PHP PDO com procedimentos armazenados do MySQL e tenho problemas com como obter parâmetros OUT da chamada de procedimento. Analisei muitos tópicos semelhantes sobre o stackoverflow, mas infelizmente não consegui encontrar uma maneira de resolver meu problema: |
Aqui estão os detalhes
O procedimento aceita 1 parâmetro de entrada e possui 2 parâmetros de saída obrigatórios e retorna o status do resultado nele
É assim que eu chamo:
$input = 5;
$mydb = new PDO("mysql:host=localhost;dbname=mydb", "user", "pass");
$proc = $mydb->prepare("CALL proc_name($input, @o_code, @o_message)");
$proc->execute();
O procedimento retorna INT no parâmetro @o_code e STRING no parâmetro @o_message. Se for chamado a partir da CLI, e após a chamada, escrevo na CLI
select @o_code, @o_message;
tudo está OK, ou seja, eu consigo ver os valores retornados nesses parâmetros OUT. No entanto, não posso fazê-lo a partir do código PHP - por algum motivo, sempre obtenho resultados FALSE. O procedimento faz seu trabalho corretamente, mas simplesmente não consigo obter seus resultado
Tentei os seguintes métodos para obter os valores, logo após fazer a chamada descrita acima:
$output = $proc->fetch(PDO::FETCH_ASSOC); // also with PDO:FETCH_OBJ
$output = $mydb->query("select @o_code, @o_message");
$output = $mydb->query("select @o_code, @o_message")->fetch();
$output = $mydb->query("select @o_code, @o_message")->fetchColumn();
$output = $mydb->query("select @o_code, @o_message")->fetchAll();
mas nenhum deles retorna nenhum resultado diferente de NULL ou FALSE. Também tentei com o bindParam, mas ainda não consegui fazê-lo funciona
Obrigado por qualquer ajuda sobre esta questão e bom dia!
----- EDIT -----
Aqui está o código que tentei com o bindParam, que ainda não funciona:
$input = 5;
$proc = $mydb->prepare("CALL proc_name(?, ?, ?)");
$proc->bindParam(1, $input, PDO::PARAM_INT);
$proc->bindParam(2, $code, PDO::PARAM_INT);
$proc->bindParam(3, $message, PDO::PARAM_STR);
$proc->execute();
var_dump($code, $message); // NULL, NULL