Я вызываю хранимую процедуру в 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, чтобы я мог убедиться, что он хранит мой возвращенный идентификатор? Вышеприведенный дамп и штамп не работают, возможно, из-за перезагрузки страницы.
Как лучше всего проверить идентификатор возврата?
Вы возвращаетесь, не дойдя до dd($returnID); Поместите эту строку первой или удалите возврат из строки 5 и поместите его в начало строки 6.
@ Millar248 Millar248 Мне нужно было бы выполнить процедуру, прежде чем получить идентификатор возврата, поэтому вы говорите удалить «возврат» и поместить его перед дампом / штампом?
Я просто говорю, что, насколько мне известно, return завершает функцию. Я не знаю, что делает "dd()", но если ваш код работает, и вы ожидаете, что dd будет отправлять данные обратно, я сомневаюсь, что он сделает это после вызова возврата. На моем месте я бы сделал так: try { //... DB::connection('odbc')->select($sql,$values); дд ($ returnID); }catch(Exception $e){ вернуть false; } вернуть истину;
@FrankerZ контроллер, который вызывает эту функцию, использует return back() в конце, и форма отправляется с помощью кнопки отправки. Можете ли вы привести пример того, как выполнить эту процедуру и высветить идентификатор в сообщении после успешного завершения?






Я новичок в сообществе и не знаю, как вам помочь, но что, если вы попробуете 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(), если это имеет значение, и форму в качестве кнопки отправки ввода. Таким образом, запись с вашим изменением по-прежнему успешно создается, но страница перезагружается, и мой идентификатор не сбрасывается.
Вы были правы, он по-прежнему вставляет запись, но я получаю недопустимое состояние курсора в процедуре, и он помечает $returnID как null
Если вы просто отлаживаете, предотвратите перенаправление и просто повторите переменную/выход. Если вам нужно сохранить поле между загрузками страниц, сохраните его в сеансе. См. Флэш-сообщения