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