Хранимая процедура MySQL, возвращающая все результаты, игнорирующая предложение WHERE - PullRequest
0 голосов
/ 13 мая 2018

У меня есть два сохраненных процесса, которые я вызываю из моего приложения Laravel.

Мое приложение laravel передает параметр cID, который затем передается хранимой процедуре в качестве "условия where". Но, похоже, что-то сбивается, и, возможно, мои переменные не установлены должным образом.

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

Также оператор выбора хранимой процедуры прекрасно работает как запрос, если я вручную установил ClientID = '';

Мой сохраненный процесс отправляет ВСЕ клиенты и карты на просмотр, полностью игнорируя предложение where.

Код Laravel:

Route::get('/clients/{cID}', function ($cID) {

    $details = DB::select('CALL sp_Details(' . DB::raw($cID) . ')');

    $cards = DB::select('CALL sp_Cards(' . DB::raw($cID) . ')');

   return view('client.show', compact('details','cards'));

});

Любой мой сохраненный процесс

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_Details`(IN cID int )
BEGIN

    SET @ClientID = cID;

            SELECT 
               ClientID,
               Client_Name
            FROM accounts
            where @ClientID = cID;
  END

Сохраненный процесс # 2

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_Cards`(cID int)
BEGIN

    SET @ClientID = cID;

          SELECT 
          ClientID,
          Code
      FROM cards
      where cID = @ClientID;
    END

1 Ответ

0 голосов
/ 14 мая 2018

Вы используете локальные переменные, такие как @ClientID, и путаете их с именами столбцов, должны изменить свой код, чтобы избежать их, и нет необходимости использовать локальную переменную:

CREATE PROCEDURE `sp_Details`(IN cID int )
BEGIN

        SELECT 
           ClientID,
           Client_Name
        FROM accounts
        where ClientID = cID;
END

Другой процесс:

CREATE PROCEDURE `sp_Cards`(cID int)
BEGIN

  SELECT 
      ClientID,
      Code
  FROM cards
  where ClientID = cID;
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...