Я только начал использовать 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