Весь рабочий образец:
ько начал использовать 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