MySQL存储过程返回所有结果,忽略WHERE claus

MySQL存储过程返回所有结果,忽略WHERE claus,mysql,laravel,stored-procedures,Mysql,Laravel,Stored Procedures,我有两个从我的laravel应用程序调用的存储过程 我的laravel应用程序传入一个cID参数,然后作为where子句传递给存储过程。但似乎有些东西误入歧途了,可能我的变量设置不正确 我还知道,laravel正在将正确的cID传递给我存储的进程,因为我启用了mysql的日志,以查看它是否传递了任何参数 另外,如果我手动设置ClientID=,则存储过程select语句作为查询运行良好 我的存储过程将所有客户机和卡发送到视图,完全忽略where子句 拉威尔代码: Route::get('/cli

我有两个从我的laravel应用程序调用的存储过程

我的laravel应用程序传入一个cID参数,然后作为where子句传递给存储过程。但似乎有些东西误入歧途了,可能我的变量设置不正确

我还知道,laravel正在将正确的cID传递给我存储的进程,因为我启用了mysql的日志,以查看它是否传递了任何参数

另外,如果我手动设置ClientID=,则存储过程select语句作为查询运行良好

我的存储过程将所有客户机和卡发送到视图,完全忽略where子句

拉威尔代码:

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

您使用的是@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

您的两个存储过程都有语法错误-在from之前的逗号。您的问题还提到了一个存储过程,但您的问题中有两个存储过程的代码。我删除了一堆不必要的选择来清理代码,这就是为什么会有逗号,进行了编辑以显示两个存储过程不要将列名用作变量名。其中@ClientID=cID;表示变量cID,而不是列cID。。。因此,是的,这将返回所有行。