Вызов хранимой процедуры mssql с использованием драйверов pdo sqlsrv с несколькими запросами внутри процедуры

Я столкнулся с проблемой при вызове хранимой процедуры с использованием драйверов sqlsrv в laravel. Внутри процедуры есть несколько запросов с комбинацией выбора и вставки. Я не могу поделиться кодом здесь, поскольку это проблема конфиденциальности.

Так может ли кто-нибудь поделиться кодом, который может работать с laravel для вызова процедуры mssql с несколькими наборами строк результатов.

Заранее спасибо!!

Без вашего кода вам трудно помочь, может быть, вам поможет этот вопрос: ссылка на сайт

Emmanuel HD 11.12.2018 05:55

Если вы используете хранимые процедуры действий, вам необходимо передать действие для выбора, вставки или обновления и т. д., Вы можете сделать это таким образом, чтобы $result = DB::select('CALL Procedure_Name(?,?,?)', array($action,$val1, $val2)); return $result;, эти ?,?,? - это параметры ваших процедур, и вы должны сделать все это в модели laravel.

Akhtar Munir 11.12.2018 05:56

@ EmmanuelHdzDíaz Спасибо за ответ, извините, но здесь проблема с конфиденциальностью, поэтому не могу поделиться кодом. Я проверил вашу ссылку, мы уже сделали это для mysql, но теперь мы ищем mssql.

Hiten H Vinchurkar 11.12.2018 06:02

@AkhtarMunir уже пробовал это, но не повезло, что он не работает для набора строк с несколькими результатами.

Hiten H Vinchurkar 11.12.2018 06:03

Что вы имеете в виду под многорядками? вы передаете массивы?

Akhtar Munir 11.12.2018 06:05

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

Hiten H Vinchurkar 11.12.2018 06:07
Стоит ли изучать 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
6
416
1

Ответы 1

MS SQL Server поддерживает хранимые процедуры, которые могут возвращать более одного набора результатов. С помощью PHP и PDO вы можете получить эти наборы результатов с помощью метода PDOStatement :: nextRowset (). Важно отметить, что если у вас есть выходные параметры в хранимой процедуре, вам необходимо получить все наборы результатов, чтобы получить выходные значения.

Если Laravel не поддерживает nextRowset(), вы можете попытаться получить базовый экземпляр PDO с помощью метода getPdo() в экземпляре соединения и использовать этот экземпляр для выполнения оператора:

<?php

...
$pdo = DB::connection()->getPdo();
try {
    $sql = "{CALL usp_TestProcedure(?)}";
    $param = 'ParamValue';
    $stmt = $pdo->prepare($sql);
    $stmt->bindParam(1, $param);
    $stmt->execute();
    do {
       while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
          print_r($row, true); 
          echo '<br>';
       }
    } while ($stmt->nextRowset());  
} catch( PDOException $e ) {
    die( "Error executing query" );
}
...

?>

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