Получение вывода из хранимой процедуры в PHP

Я вызываю хранимую процедуру в php прямо сейчас, и третий параметр процедуры - это параметр OUT, поэтому он должен получать вывод

Когда я запускаю это:

function createNameRecord($firstName,$lastName){
    try{
        $sql = "CALL schema.CREATE_RECORD(?,?,?)";
        $values = [$firstName,$lastName,$returnID];
        return DB::connection('odbc')->select($sql,$values);
        dd($returnID);
    }catch(Exception $e){
        return false;
    }
}

Процедура выполняется правильно и перезагружает страницу, и когда я проверяю базу данных, запись была успешно создана. Однако мне нужна выходная переменная, которая является идентификатором созданной записи, и мне нужно, чтобы она возвращалась для функции, которая запускается впоследствии.

ТАК, поскольку это запускается, успешно создает запись и перезагружает страницу, то как я могу сбросить вывод $returnID, чтобы я мог убедиться, что он хранит мой возвращенный идентификатор? Вышеприведенный дамп и штамп не работают, возможно, из-за перезагрузки страницы.

Как лучше всего проверить идентификатор возврата?

Если вы просто отлаживаете, предотвратите перенаправление и просто повторите переменную/выход. Если вам нужно сохранить поле между загрузками страниц, сохраните его в сеансе. См. Флэш-сообщения

ugh StackExchange 08.02.2019 16:49

Вы возвращаетесь, не дойдя до dd($returnID); Поместите эту строку первой или удалите возврат из строки 5 и поместите его в начало строки 6.

Millar248 08.02.2019 17:01

@ Millar248 Millar248 Мне нужно было бы выполнить процедуру, прежде чем получить идентификатор возврата, поэтому вы говорите удалить «возврат» и поместить его перед дампом / штампом?

Geoff_S 08.02.2019 17:26

Я просто говорю, что, насколько мне известно, return завершает функцию. Я не знаю, что делает "dd()", но если ваш код работает, и вы ожидаете, что dd будет отправлять данные обратно, я сомневаюсь, что он сделает это после вызова возврата. На моем месте я бы сделал так: try { //... DB::connection('odbc')->select($sql,$values); дд ($ returnID); }catch(Exception $e){ вернуть false; } вернуть истину;

Millar248 08.02.2019 17:30

@FrankerZ контроллер, который вызывает эту функцию, использует return back() в конце, и форма отправляется с помощью кнопки отправки. Можете ли вы привести пример того, как выполнить эту процедуру и высветить идентификатор в сообщении после успешного завершения?

Geoff_S 08.02.2019 17:36
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
5
71
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я новичок в сообществе и не знаю, как вам помочь, но что, если вы попробуете mysqli_real_query() и получите результаты, как сказано в документе:

Executes a single query against the database whose result can then be retrieved or stored using the mysqli_store_result() or mysqli_use_result() functions.

Ответ принят как подходящий

Как только ваша функция увидит return, функция больше не будет выполнять код после этой строки. В этом случае dd($returnID); никогда не будет выполнен. Если вы просто отлаживаете, просто удалите return и дайте dd() вывести/умереть:

function createNameRecord($firstName,$lastName){
    try{
        $sql = "CALL schema.CREATE_RECORD(?,?,?)";
        $values = [$firstName,$lastName,$returnID];
        DB::connection('odbc')->select($sql,$values);
        dd($returnID);
    }catch(Exception $e){
        return false;
    }
}

В этом случае вас не волнует возвращаемое значение (что бы ни вызывало createNameRecord), так как вы просто хотите, чтобы ваш скрипт завершился/умер.

Если он все еще перезагружает страницу, то ваш оператор catch, вероятно, выполняется, и вы также должны отладить это:

function createNameRecord($firstName,$lastName){
    try{
        $sql = "CALL schema.CREATE_RECORD(?,?,?)";
        $values = [$firstName,$lastName,$returnID];
        DB::connection('odbc')->select($sql,$values);
        dd($returnID);
    }catch(Exception $e){
        dd($e);
    }
}

Я пробовал это, но он все еще обновляет страницу, я думаю, что это моя проблема. Контроллер, управляющий этим, использует return back(), если это имеет значение, и форму в качестве кнопки отправки ввода. Таким образом, запись с вашим изменением по-прежнему успешно создается, но страница перезагружается, и мой идентификатор не сбрасывается.

Geoff_S 08.02.2019 17:45

Вы были правы, он по-прежнему вставляет запись, но я получаю недопустимое состояние курсора в процедуре, и он помечает $returnID как null

Geoff_S 08.02.2019 17:53

Другие вопросы по теме