Весь рабочий образец:

ько начал использовать PHP PDO с хранимыми процедурами MySQL, и у меня возникли проблемы с получением параметров OUT из вызова процедуры. Я просмотрел много похожих тем, связанных с переполнением стека, но, к сожалению, не смог найти способ решить мою проблему: |

Вот подробности:

Процедура принимает 1 входной параметр и имеет 2 обязательных выходных параметра и возвращает в них статус результата.

Вот как я это называю:

$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();

Процедура возвращает INT в параметре @o_code и STRING в параметре @o_message. Если он вызывается из CLI, а после звонка пишу в CLI

select @o_code, @o_message;

все в порядке, то есть я могу видеть значения, возвращенные в этих параметрах OUT. Однако я не могу сделать это из кода PHP - по какой-то причине я всегда получаю ЛОЖНЫЕ результаты. Процедура делает свою работу правильно, но я просто не могу получить ее результаты.

Я попробовал следующие методы, чтобы получить значения, сразу после того, как я сделал вызов, описанный выше:

$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();

но ни один из них не возвращает никакого результата, отличного от NULL или FALSE. Я также пытался с bindParam, но все еще не мог заставить его работать.

Спасибо за любую помощь в этом вопросе и хорошего дня!

----- РЕДАКТИРОВАТЬ -----

Вот код, который я пробовал с bindParam, который все еще не работает:

$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

Ответы на вопрос(1)

Ваш ответ на вопрос